zoukankan      html  css  js  c++  java
  • 匿名类基础知识整理

    匿名内部类适合创建那种只需要一次使用的类,例如命令模式时所需要的Command对象。匿名内部类的语法有点奇怪,创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,匿名内部类不能重复使用。

    定义匿名内部类的格式如下:

        new 父类构造器(参数列表)|实现接口()  
        {  
         //匿名内部类的类体部分  
        }  

    从上面定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
    关于匿名内部类还有如下两条规则:
    1)匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。因此不允许将匿名内部类定义成抽象类。
    2)匿名内部类不等定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义实例初始化块,通过实例初始化块来完成构造器需要完成的事情。

    interface Product {
        public double getPrice();
    
        public String getName();
    }
    
    
    public class TestAnonymous {
        public void test(Product p) {
            System.out.println("购买了一个" + p.getName() + ",花掉了" + p.getPrice());
        }
    
        public static void main(String[] args) {
            TestAnonymous ta = new TestAnonymous();
            ta.test(new Product() {
                    public double getPrice() {
                        return 567;
                    }
    
                    public String getName() {
                        return "AGP显卡";
                    }
                });
        }
    }
    

    只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现。最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口。
    Thread类的匿名内部类实现:

    public class Demo {
        public static void main(String[] args) {
            Thread t = new Thread() {
                    public void run() {
                        for (int i = 1; i <= 5; i++) {
                            System.out.print(i + " ");
                        }
                    }
                };
            t.start();
        }
    }

    Runnable接口的匿名内部类实现:

    public class Demo {
        public static void main(String[] args) {
            Runnable r = new Runnable() {
                    public void run() {
                        for (int i = 1; i <= 5; i++) {
                            System.out.print(i + " ");
                        }
                    }
                };
            Thread t = new Thread(r);
            t.start();
        }
    }


  • 相关阅读:
    pandas
    使用Selenium模拟浏览器抓取淘宝商品美食信息
    Pycharm安装第三方库
    shift 函数
    mysql 基础(一)
    mysql基础(三)
    Python Programming for Finance
    进程线程
    股票上市代码及上市时间
    SQLyog连接数据库报错plugin caching_sha2_password could not be loaded
  • 原文地址:https://www.cnblogs.com/archermeng/p/7537112.html
Copyright © 2011-2022 走看看