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

    匿名内部类也就是没有名字的内部类

    正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

    但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

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

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

    interface Product
    {
    	void test();
    }
    class A implements Product
    {
    	public void test()
    	{
    		System.out.println("kkk");
    	}
    }
    public class Test
    {
    	public static void main(String args[])
    	{
    		Product p=new Product(){
    			public void test()
    			{
    				System.out.println("这是什么玩意。");	
    			}
    		};
    	}
    }

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

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

    当用接口作为参数:
    interface A{
        public void printInfo();
    }
    class X{
        public void fun1(){
            this.fun2(new A(){
                public void printInfo(){
                    System.out.println("Hello World!!!");
                }//内部类
            });
        }
        public void fun2(A a){
            a.printInfo();
        }
    }
    public class Test{
        public static void main(String args[]){
            new X().fun1();
        }
    }


  • 相关阅读:
    office2013 激活方式
    c# DataGridView绑定DataTable对象之后总会多一行
    oracle函数验证时间格式并返回
    Linux虚拟机与外面系统ping不通,或者连不上网
    恢复oracle中误删除drop掉的表
    WebService 检测到有潜在危险的 Request.Form 值
    mybatis标签之——关联映射
    word使用宏定义来统一设置图片大小
    mybatis常用标签
    mybatis标签之——<trim>
  • 原文地址:https://www.cnblogs.com/dengshiwei/p/4258554.html
Copyright © 2011-2022 走看看