外部类与内部类

什么是外部类、内部类

public class Outer {
    class Inner{
        
    }
}

如上述代码,Outer是一个外部类,Inner是一个内部类,内部类也可以用publicstatic等修饰,但要注意:
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

注意:

  1. 一般只需将有main方法的类用public修饰,否则会提示错误: 类 XXX 是公共的, 应在名为 XXX.java 的文件中声明,当然你也可以去整一个新的.java;
  2. 编译时只需编译main方法所在的类,其它类会根据你的访问自动完成编译。
  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值