首页 > 其他分享 >外部类与内部类

外部类与内部类

时间:2022-09-07 12:23:57浏览次数:52  
标签:部类 内部 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
From: https://www.cnblogs.com/h2285409/p/16664960.html

相关文章

  • 如何对module内部中的parameter进行重定义
    例如点击查看代码moduletest_a#(paramterDATA_WIDTH=16,paramterADDR_WIDTH=4)(inputxxxx,...outputxxx);...endmodule......
  • Pycharm生成allure报告报错--allure不是内部或外部命令,也不是可运行的程序 或批处理文
    问题:allure报错:‘allure’不是内部或外部命令,也不是可运行的程序或批处理文件 截图:  解决方法:1.安装JDK(版本1.8+),配置环境变量此处不展示过程,成功的后进入cmdjava-version......
  • js函数( 普通函数、箭头函数 ) 内部this的指向
    -普通函数 |具名普通函数、匿名普通函数,在不作为对象的属性值的情况下,其内部的this总是指向代码运行环境下的全局对象(例如,浏览器中的window)。  示例:......
  • 内部类
    publicclassOuter{intage=99;publicvoidout(){System.out.println("这是外部类");}//创建内部类publicclassIner{......
  • 解决:'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件 根目
    解决:'webpack-dev-server'不是内部或外部命令,也不是可运行的程序或批处理文件根目录删除node_modules文件夹运行“npmrundev”相信很多人在使用webpack-dev-server......
  • 内部类-多线程-静态代理
    内部类概念:一个类中定义另外一个类,那这个另外的类就是内部类分类:在类的成员位置:成员内部类(如果内部类被static修饰,则这个内部类称之为静态内部类)在......
  • 02 | JAVA内部类
    java内部类Java的内部类分为好几种,通常情况用得不多,但也需要了解它们是如何使用的。1.InnerClass如果一个类定义在另一个类的内部,这个类就是InnerClass:它与普通类有......
  • jdk18.0.1.1解决jar不是内部或外部命令
    查到的都是把什么弄到哪个鸟文件夹去,但我这个版本根本就没有那个文件夹。在cmd里输wherejava,如果输出的是一个类似c:/user/oracle/java的文件夹,并且这个文件夹不是你安装......
  • Day33内部类
    内部类内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对于A类来说就成为内部类,而A类相对于B类来说就是外部类了。1.成员内部类2.静态内部类3.局......
  • @vue/cli 安装及'vue' 不是内部或外部命令解决办法
    1、首先安装@vue/clinpminstall-g@vue/cli提示安装成功,版本啥的,忘了截图2、然后vue-V或者vue--version查看版本但是提示'vue'不是内部或外部命令解决办法我......