• Java 内部类的阐述


    创建一个Computer抽象类:用来在Test类中创建匿名抽象类

    package com.zhiyou;
    
    public abstract class Computer {
        
        int a  = 1;
        /**
         * 不能够创建出抽象类的一个对象
         */
        public abstract void online();
        public abstract void watchTv();
    }


    创建一个外部类Outter,在这个外部类Outter的内部在创建一个内部类Inner,在不同的位置定义变量a,我们需要注意的是如何调用不同位置的变量a!

    package com.zhiyou;
    
    public class Outter {
    
        public void a() {
            int a = 3;
    
            System.out.println("外部类a方法--" + this.a);
        }
    
        /**
         * 嵌套的概念 除了变量和方法之外,我们还可以定义一个类 这个类就是内部类
         */
        int a = 1;
    
        class Inner {
            int a = 2;
    
            public void b() {
                int a = 3;
                // 不加任何描述的时候根据就近原则调用离他最近的变量
                System.out.println("方法内部局部变量--" + a);
                // this. 代表调用本类的成员变量或方法
                System.out.println("内部类的成员变量--" + this.a);
                // Outter.this. 代表调用外部类的成员变量或方法
                System.out.println("外部类的成员变量--" + Outter.this.a);
    
                // 调用方法的形式:方法名--()参数列表--分号
                // a();
            }
        }
    
    }

    创建一个接口AAA用来创建接口的匿名内部类

    package com.zhiyou;
    
    public interface AAA {
    }

    创建测试类Test,用来输出

    package com.zhiyou;
    
    /**
     * 同一个包下面,普通类创建对象时可以直接调用 但是内部类就需要使用import引入
     */
    // import com.zhiyou.Outter.Inner;
    
    public class Test {
    
        /**
         * 内部类
         * 
         */
        public static void main(String[] args) {
    
            // 生成的二进制字节码文件(.class文件)名称是Outter.class
            // 那么它里面的内部类Inner生成的文件名称是Outter$Inner.class
            Outter outter = new Outter();
            // System.out.println(outter.a);
            // outter.a();
    
            /*
             * 讲继承的时候说过:没有父类就没有子类 对于内部类也一样:没有外部类的对象就不能创建一个内部类的对象
             * 
             * 创建内部类对象的方法:通过外部类的对象去创建内部类的对象
             */
            // 写法1
            Outter.Inner inner = outter.new Inner();
            // 写法2
            // 通过这种方式创建出来的外部类对象没有引用,是不能使用里面的变量和方法的
            // 匿名:new Outter().new Inner();创建出来了一个外部类的对象,但是他没有引用,没用名字
            Outter.Inner inner1 = new Outter().new Inner();
    
            System.out.println(inner.a);
            inner.b();
    
            /**
             * 不能够创建出抽象类的一个对象 匿名的概念
             * 
             * 匿名内部类 这下面其实是有一个类的存在的,但是我们看不见类的任何影子 在编译后的目录中多出来一个 Test$1.class
             * 
             * 相当于:创建出来了一个匿名内部类继承了抽象类Computer并实现了他的抽象方法 创建出了一个抽象类的子类的对象
             */
            Computer computer = new Computer() {
                public void watchTv() {
                    System.out.println("匿名内部类中的方法  看电视");
                }
    
                public void online() {
                    System.out.println("匿名内部类中的方法  上网");
                }
            };
            System.out.println("抽象类中的变量  a" + computer.a);
            computer.watchTv();
            computer.online();
    
            /*
             * 匿名内部类的创建形式
             * 
             * 不是new+构造方法
             * 
             * new--抽象类或者接口名--()--{}实现抽象方法的地方--分号
             * 接口是没有构造方法的的,抽象类有
             */
            AAA a = new AAA() {
            };
        }
    
    }

     

  • 相关阅读:
    Spark官方文档——本地编写并运行scala程序
    scala函数组合器
    scala数组
    scala实现kmeans算法
    Nginx 服务器安装及配置文件详解
    OpenVAS开源风险评估系统部署方案
    Elasticsearch和Head插件安装
    手把手教你在CentOS 7.4下搭建Zabbix监控(转)
    elasticsearch6.X 及head插件部署(完整版)
    Vim配置(python版)
  • 原文地址:https://www.cnblogs.com/zhaiyaohua/p/5800096.html
Copyright © 2020-2023  润新知