• 内部类和 外部类相互访问


    内部类:

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

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

    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

  • 相关阅读:
    结构体struct和typedef后面接指针的含义
    C++中关于指针初始化和使用NULL的理解
    (虚)继承类的内存占用大小
    为什么构造函数不能为虚函数
    C++中变量自动初始化的问题
    CY7C68013A的一点总结
    Altium designer总结
    在Linux系统上限制远程登录的IP
    linux系统如何限制其他用户登录
    使用秘钥对登录Linux系统
  • 原文地址:https://www.cnblogs.com/51python/p/11483134.html
Copyright © 2020-2023  润新知