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();
        }
    }


  • 相关阅读:
    enca工具,检测文件编码
    ubuntu 支持gbk
    LinkedList线程安全问题
    php防止form重复提交的方法
    Linux 内存泄露调试工具
    从B树、B+树、B*树谈到R 树
    Ubuntu 语言设置
    wwwauthenticate
    Lua脚本语法说明
    jQuery学习总结之元素的相对定位和选择器持续更新中
  • 原文地址:https://www.cnblogs.com/archermeng/p/7537112.html
Copyright © 2011-2022 走看看