zoukankan      html  css  js  c++  java
  • JAVA匿名内部类

    • 首先定义一个抽象类Computer
    public abstract class Computer {
        //抽象类是不可以常见对象的
        int a=1;
        public abstract void online();
        public abstract void watchTV();
    }
    • 入口:Test 注意:抽象类有构造方法但是接口是没有构造方法的,所以下面代码中new 后面加的是匿名抽象类
    public class Test {
        public static void main(String[] args) {
    //        生成的二进制字节码文件(.class文件)名称为:Outer.class文件
            //创建内部类对象的第一种写法:通过这种方式常见出来的外部类对象没有引用,我们不能引用他的对象和方法
    //        匿名:
            //下面的这种创建内部类对象的方法new Outer()并没有被引用,所以他是一个匿名的对象
            Outer.Inner inner = new Outer().new Inner();
            inner.b();
            System.out.println("------------------------------------------");
            //创建内部类的第二种写法:先创建外部类对象,然后由外部类的对象去创建内部类的对象
            Outer outer = new Outer();//创建了外部对象
            Outer.Inner inner1 = outer.new Inner();//创建内部的对象
            inner1.b();
            /**匿名的概念:
             *匿名内部类:这下面其实是有一个类的存在的,但是我们看不见类的任何影子
             *在编译后的目录中多出来一个Test$1.class这是一个内部类名字是:Test$1.class
             *相当于创建出来一个匿名的内部类(这个匿名内部类相当于这个抽象类的子类)然后继承了抽象类,并实现了他的抽象方法
             *
             * 这个匿名内部类是一次性的
             */
    
            Computer PC = new Computer() {
                @Override
                public void online() {
                    System.out.println("匿名内部类中的方法  上网");
                }
    
                @Override
                public void watchTV() {
                    System.out.println("匿名内部类中的方法  看电视");
                }
            };//注意最后的分号不能少
            System.out.println("抽象类中的变量 a"+PC.a);
            PC.online();
            PC.watchTV();
            /**
             * 匿名内部类的创建形式:
             *
             * new ---抽象类或者接口名--()---{}实现抽象方法的地方----分号
             *
             *
             */
                    Standard a=new Standard() {
                        @Override
                        public void supply() {
                            System.out.println("我的电脑");
    
                        }
    
                        @Override
                        public void reticle() {
    
                        }
    
                        @Override
                        public void usb() {
    
                        }
                    };
            a.supply();
    
            /**
             * 讲继承的时候说过:没有父类就没有子类
             * 对于内部类也一样:没有外部类的对象就不能创建一个内部类的对象
             * 创建内部类对象的方法:通过外部类的对象去创建内部类的对象
             */
    
    
        }
    }
  • 相关阅读:
    go语言浅析二叉树
    Go语言冒泡、选择、插入、快速排序实战浅析
    go语言教程之浅谈数组和切片的异同
    实测Maven上传jar包到私服的方法归纳
    干货|Dubbo社区开发者日经验分享
    Go语言系列开发之延迟调用和作用域
    mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)
    时间操作
    大型网站架构设计方向初探
    C#输入法
  • 原文地址:https://www.cnblogs.com/zhaiyaohua/p/5800034.html
Copyright © 2011-2022 走看看