ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

外部类与内部类

2022-09-07 12:33:53  阅读:134  来源: 互联网

标签:部类 内部 public Inner new class


什么是外部类、内部类

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

标签:部类,内部,public,Inner,new,class
来源: https://www.cnblogs.com/h2285409/p/16664960.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有