码迷,mamicode.com
首页 > 编程语言 > 详细

java编程思想笔记20170126

时间:2017-01-26 12:28:08      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:des   创建   abstract   instance   label   override   blog   匿名类   const   

如果定义一个匿名内部类,并且希望它使用一个在其外部定义的对象,那么编译器会要求其参数引用是final的,如果没有,将会出现一个编译时错误消息

import com.javabase.chaptersix.Destination;

public class Parcel9 {
    public Destination destination(final String dest){
        return new Destination(){
            private String label = dest;
            public String readLabel(){
                return label;
            }
        };
    }
    
    public static void main(String[] args) {
        Parcel9 p = new Parcel9();
        Destination d = p.destination("Tasmania");
    }
}

通过实例初始化,能够达到为匿名内部类创建一个构造器的效果

abstract class Base{
    public Base(int i){
        System.out.println("Base constructor, i = " + i);
    }
    public abstract void f();
}
public class AnonymousConstructor {
    public static Base getBase(int i){
        return new Base(i){
            {
            System.out.println("Inside instance initializer");
            }

            @Override
            public void f() {
                System.out.println("In anonymous f()");
            }
            
        };
    }
    public static void main(String[] args){
        Base base = getBase(47);
        base.f();
    }
}

在上例中,不要求变量i一定是final的。因为i被传递给匿名类的基类的构造器,它并不会在匿名类内部被直接使用。

 

java编程思想笔记20170126

标签:des   创建   abstract   instance   label   override   blog   匿名类   const   

原文地址:http://www.cnblogs.com/919czzl/p/6351444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!