内部类和 外部类相互访问

Posted 51python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内部类和 外部类相互访问相关的知识,希望对你有一定的参考价值。

内部类:

①静态内部类中可以有非静态的方法

②当内部类中有静态方法或者静态成员变量时,一定是静态内部类

 

1、外部类访问内部类:

   内部类被static修饰:可以直接new

    Inner in = new Inner();

   内部类没有被static修饰:得先new出来外部类的实例,再new内部类的

    Inner in = new Outer().new Inner();

2、内部类访问外部类:(外部类.this.变量)

3、外部类和内部类中的方法相互访问:

①外部类的静态方法test和非静态内部类的非静态方法voice的相互访问:

   test访问voice       先new外类再new内类,再调方法

  

public class Outerclass {
    class Inner{
        public void voice(){
            System.out.println("voice()");
        }
    }
    public static void test(){
        new Outerclass().new Inner().voice();
    }
    public static void main(String[] args) {
      //主函数调用test方法
       test();13     }
}

 

  voice访问test        外类.this.方法(持有的外部类的引用)

public class Outerclass {
    class Inner{
        public void voice(){
            Outerclass.this.test();
        }
    }
    public static void test(){
        System.out.println("test()");
    }
    public static void main(String[] args) {
    //主函数调用voice()
        Inner in = new Outerclass().new Inner();
        in.voice();
    }
}

 

②外部类的非静态方法test和静态内部类中的非静态方法voice之间的相互调用

  voic访问test   

public class Outerclass {
    static class Inner{
        public void voice(){
            new Outerclass().test();
        }
    }
    public void test(){
        System.out.println("test()");
    }
    public static void main(String[] args) {
    //主函数调用voice()方法
        new Outerclass.Inner().voice();
    }
}

  test访问voice

public class Outerclass {
    static class Inner{
        public void voice(){
            System.out.println("voice()");
        }
    }
    public void test(){
      //1、其他类访问外部类中的静态内部类的非静态方法
       // new Outerclass.Inner().voice();
      //2、此处的Outerclass中的test方法访问静态内部类中的非静态方法
       new Inner().voice();
    }
    public static void main(String[] args) {
      //主函数调用test方法
        new Outerclass().test();
    }
}

转自:https://www.cnblogs.com/rgever/p/8902758.html

以上是关于内部类和 外部类相互访问的主要内容,如果未能解决你的问题,请参考以下文章

java 内部类和外部类的关系

Java内部类和外部类互相访问问题

JAVA 中外部类可以访问非静态内部类的私有属性???

内部类和外部类的实例变量可以共存

无法访问 DLL 外部的内部类和某些公共变量不可访问

java内部类访问外部静态变量