• java--内部类


    class B517{
        B517(){
            System.out.println("instance of B.");
        }
        class InnerB{
            public InnerB() {
                // TODO 自动生成的构造函数存根
                System.out.println("instance of innerB.");
            }
        }
    }
    public class A517 {
        public static void main(String[] args) {
            B517 bbb = new B517();
            B517.InnerB inbbb = bbb.new InnerB();
            System.out.println();
            inbbb = new B517().new InnerB();
        }
    
    }

    //内部类名的全名称是 包名.外部类名.内部类名
    //在包外用全名,再外包类外面就使用 外部类名.内部类名,例如B517.InnerB
    //在类A517中创建的内部类句柄inbbb的声明类型是B517.InnerB(必须使用全名);
    //内部类的new方法。
    //创建一个内部类,必须先有一个外包类的对象存在。
    //在外包类中创建内部类对象,可以简单一点,因为外包类的this句柄已经存在。

    【内部类与外包类的关系】

    class B518{
        private int x = 100;
        class InnerB{
            private int y = 111;
            void show(){                      //包内方法
                System.out.print("x = "+x);//访问包外私有成员
                System.out.println(", y = "+y);
            }
        }
        public void show(){//包外类方法
            InnerB inB = new InnerB();
            System.out.println(inB);
            System.out.println(inB.y);
            inB.show();
        }
    }
    public class A518 {
        public static void main(String[] args) {
            new B518().new InnerB().show();
            new B518().show();
        }
    
    }

    //在外包类的类体中,内部类对象同样属于外部类对象的成员,因此他们 可以相互访问对方的所有成员(包括私有成员),他们之间是完全相互信任的。
    //内部类和外部类有着各自的命名空间,即使他们有相同的方法名,也不会有冲突。
    //如果内部类的成员变量隐藏了外部类的成员变量,可以通过    【包外类.this.变量名】访问被隐藏的包外类的成员变量。

    //内部类的编写
    
    package Test;
    
    public class App_1 {
        public static void main(String[] args) {
            Caaa caaa = new Caaa();
            caaa.set_num(5);
        }
        static class Caaa{
            int num;
            void set_num(int n){
                num = n;
                System.out.println("num = "+num);
            }
        }
    }

    //由于static方法只能访问static成员,所以类Caaa只能是static

    【在外部类的构造函数中创建内部类对象】

    如果不想将上一个实例中的Caaa设置为static,而且还想再main中继续使用它。

    (1)、在外部类的构造函数中创建内部类的对象。

    (2)、在main的创建外部类的对象。

    //内部类的编写
    
    package Test;
    
    public class App_1 {
        public App_1(){
            
            Caaa caaa = new Caaa();
            caaa.setNum(5);
        }
        class Caaa{
            int num;
            void setNum(int n){
                num = n;
                System.out.println("num = "+num);
            }
        }
        public static void main(String[] args) {
            App_1 objApp_1 = new App_1();
            objApp_1.new Caaa().setNum(23);
        }
    }
    //num = 5
    //num = 23

    在创建外部类的同时会创建一个内部类对象,这样达到了在main中使用内部类的目的。

    【在窗口程序设计中,会使用这样的编程技巧来编写窗口程序】。

    【在外部类的外面引用内部类】

      内部类对象的创建的前提,必须有一个外部类的对象。比如外部类Outer,内部类Inner。内部类中有一个方法f       ()。现在调用f()。

      Outer outer = new Outer();

      Outer.Inner inner = outer.new Inner();

      inner.f();

    【在方法中定义内部类】  

      如果内部类中要使用到方法中的变量,那么这个变量必须为   final。

  • 相关阅读:
    基础之前ORM的一个框架(在OA系统上已经应用)
    自己创建的一个ORM框架
    spring cloud+docker 简单说一说
    有价值的数据
    Axis2Service客户端访问通用类集合List自定义类型
    java.io.IOException: Cleartext HTTP traffic to e.hiphotos.baidu.com not permitted
    Android Studio 3.x 自动生成多渠道包
    单例模式
    Linux(ubuntu 18.0.4) Java环境安装,环境变量配置
    ImageLoader常用方法注释
  • 原文地址:https://www.cnblogs.com/plxx/p/3336987.html
Copyright © 2020-2023  润新知