IT评测·应用市场-qidao123.com
标题:
Java学习------内部类
[打印本页]
作者:
大连密封材料
时间:
2025-3-18 11:58
标题:
Java学习------内部类
1. 界说
界说在一个类中的类
2. 利用时机
当一个类必要用到另一个类,并且两个类的接洽比力密切时就必要利用内部类
内部类可以访问外部类的私有成员,这样可以将相关的类和接口隐藏在外部类的内部,提高封装性
匿名内部类是没著名字的类,通常用于界说一个只利用一次的类
3. 分类
3.1 静态内部类
可以当做静态变量来看
//静态内部类
public class OuterClass{
private static int i = 0;
private int j = 100;
public static void m1() {
System.out.println("m1");
}
public void m2() {
System.out.println("m2");
}
//静态内部类
//四种访问控制权限修饰符在这里都可以使用
private static class InnerClass {
public void m3() {
System.out.println(i); //可以访问
System.out.println(j); //不可以访问
m1(); //可以访问
m2(); //不可以访问
}
}
}
复制代码
注意点:无法直接访问外部类中实例变量和实例方法
如何利用: OuterClass.InnerClass oi = new OuterClass.InnerClass ();
3.2 实例内部类
可以当做实例变量来看
//实例内部类
public class OuterClass{
private static int i = 0;
private int j = 100;
public static void m1() {
System.out.println("m1");
}
public void m2() {
System.out.println("m2");
}
//静态内部类
//四种访问控制权限修饰符在这里都可以使用
private class InnerClass {
public void m3() {
System.out.println(i); //可以访问
System.out.println(j); //可以访问
m1(); //可以访问
m2(); //可以访问
}
}
}
复制代码
注意点:可以直接访问外部类中所有的实例变量,实例方法,静态变量,静态方法
如何利用: OuterClass.InnerClass oi = new OuterClass().new InnerClass ();
3.3 局部内部类
可以当做局部变量来看
//局部内部类
public class OuterClass{
private static int i = 0;
private int j = 100;
public void m1() {
//局部变量
int i = 11;
//局部内部类
class InnerClass {
public void m2() {
System.out.println(i); //可以访问
System.out.println(j); //可以访问
}
}
//new 对象
InnerClass ic = new InnerClass();
ic.m2();
}
public static void m3() {
int i = 11;
//局部内部类
//这里的内部类的类名可以和上面相同的原因是属于局部,就和局部变量一样,出了大括号之后就没了
class InnerClass {
public void m2() {
System.out.println(i); //可以访问
System.out.println(j); //不可以访问
}
}
}
}
复制代码
注意点:
局部内部类方外类外部的局部变量时,局部变量必要被final修饰
不能利用访问权限控制符修饰,由于只是在局部访问,外部不必要访问,添加这些修饰符也没有什么用
从JDK8开始,不必要手动添加final了,但JVM会自动添加
3.4 匿名内部类
特殊的局部内部类,没著名字,只可以利用一次
//匿名内部类
public class test {
public static void main(String[] args) {
Computer c = new Computer();
c.conn(new Usb() {
@Override
public void read() {
System.out.println("read");
}
@Override
public void write() {
System.out.println("write");
}
});
}
}
class Computer {
public void conn(Usb usb) {
usb.read();
usb.write();
}
}
interface Usb {
void read();
void write();
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4