Java中的成员内部类的使用规范

成员内部类的使用规范,自己看书也没看明白啥,一头雾水,自己琢磨出来了,分享给大家,内容都在图中,有不对的及时评论,以免误导他人。
Java中的成员内部类的使用规范_第1张图片

成员内部类
* 在内部类中创不创建外部类对象,都可以随意使用外部类的成员
* 在外部类中创建内部类对象分为两种情况
(1)在外部类中静态方法内创建
(2)在外部类中成员方法内和类体类创建(直接创建)
在静态方法中创建:必须通过创建出来的外部类对象的引用来创建内部类对象,可以通过内部类对象来访问内部类任意成员,内部类
对象绑定在这个外部类对象上,内部类对象可以调用内部类中的方法来修改与他绑定的那个外部类对象的成员。如果外部类对象中有
内部类对象成员,那么这个成员调用内部类中的方法也会修改外部类对象的成员的值。一个是绑定的一个是成员都能修改绑定的外部
类对象的属性值。
在外部类中成员方法内和类体类中可以直接创建内部类对象。
语法:外部类名.内部类名 引用名 = 外部类引用.new 内部类名();
* 内部类中不能定义static方法,只能在静态类型或顶层类中才能声明静态方法。当然也不能定义main方法了。

上面的源代码我发在下面,如果想自己调试可以复制
public class OuterClass {
innerClass in = new innerClass(); //在外部类体内 可以直接创建内部类对象
private int z = 3,w = 5;
public void ouf() {
in.inf();
innerClass inc = new innerClass(); } //在外部类非静态方法中可以直接创建内部类对象
public class innerClass {//内部类开始
public void inf() {
OuterClass out = new OuterClass();
out.z =2; //内部类中可以创建外部类对象,通过外部类对象可以访问外部类成员
z++;w++; doit(); //内部类可以直接随意访问外部类的成员(不用创建外部类对象,直接随意访问)
}
private int y = 0;
//public static void scc() { } //报错,只能在静态类 或 顶级类中才能声明静态方法
}//内部类结束
public innerClass doit() {
//y = 0; //外部类不可以直接随意访问内部类成员,必须在创建对象后,通过对象.访问。如:下一行
in.y = 4; //外部类中创建内部类对象后可以通过内部类对象随意访问内部类中的成员。
return new innerClass();
}
public static void main(String args[]) { //OuterClass.innerClass in = out.doit();
OuterClass out = new OuterClass();
OuterClass.innerClass in2 = out.new innerClass();//外部类的static方法中必须用外部类对象的引用来创建内部类对象
System.out.println(out.z +" " + out.w); //3 5
out.in.inf(); //外部类在创建内部类对象后通过内部类对象可以随意使用内部类的成员,如果不创建对象,不能直接随意访问
//y = 5; //比如这个语句,你说它是哪个对象的y? 对吧 编译器肯定这行报错了
System.out.println(out.z +" " + out.w);//4 6
//out中的in把out的成员z和w改变了,所以说内部类可以直接访问外部类成员,外部类不能直接访问内部类成员,必须创建对象后访问
in2.inf();
//out.in2.inf();//报错,out对象中没有in2这个对象,它只是和外部类对象out绑在一起,可以通过in2来修改与之绑定的外部类
System.out.println(out.z +" " + out.w); //对象out的成员
//innerClass inner1 = new innerClass(); 报错,外部类的static方法中必须用外部类对象来创建内部类对象
}
}

你可能感兴趣的:(内部类,成员内部类,Java,java,编程语言)