外部类与内部类
什么是外部类、内部类
public class Outer { class Inner{ } }
如上述代码,Outer是一个外部类,Inner是一个内部类,内部类也可以用public、static等修饰,但要注意:
1.静态内部类中可以有非静态的方法;
2.当内部类中有静态方法或者静态成员变量时,一定是静态内部类。
外部类与内部类的区别与联系:
内部类可以访问外部类所有的方法和属性,如果内部类和外部类有相同的成员方法和成员属性,内部类的成员方法调用要优先于外部类即内部类的优先级比较高(只限于类内部,在主方法内,内部类对象不能访问外部类的成员方法和成员属性),外部类只能访问内部类的静态常量或者通过创建内部类来访问内部类的成员属性和方法。
如何访问
1. 外部类访问内部类:
内部类被static修饰:可以直接new Inner in = new Inner();
内部类没有被static修饰:先new出外部类的实例,再new内部类的 Inner in = new Outer().new Inner();
2. 内部类访问外部类:(外部类.this.变量)
下面有一个例子很好的展示了内部类与外部类的访问:
public class Outer { int x = 9; class Inner{ int x = 8; public void test(){ int x = 7; System.out.println(x); System.out.println(this.x); System.out.println(Outer.this.x); //这里展示了三种不同的访问及其对应的结果 test1(); } } private void test1(){ System.out.println("test"); } public static void main(String[] args) { Inner in = new Outer().new Inner(); in.test(); } }
输出结果:7,9,8,test
3. 在外部类中访问另一个外部类中的类
我们只需从外部类一直点到内部类即可:Father.Child outting = new Father().new Child();。
下面有个例子展示了这一过程:
class Father { //外部类 String name = "zhangjun"; class Child { //内部类 public void introFather() { System.out.println(Father.this.name); } } } public class Test { public static void main(String[] args) { Father.Child outting = new Father().new Child(); outting.introFather(); //调用introFather } }
-输出:zhangjun
注意:
一般只需将有main方法的类用public修饰,否则会提示错误: 类 XXX 是公共的, 应在名为 XXX.java 的文件中声明,当然你也可以去整一个新的.java;
编译时只需编译main方法所在的类,其它类会根据你的访问自动完成编译。
————————————————
版权声明:本文为CSDN博主「Mason_Swift」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Moum_j/article/details/123785552
本文来自博客园,作者:天军,转载请注明原文链接:https://www.cnblogs.com/h2285409/p/16664960.html