类的匿名内部类

1. 解释

匿名内部类常用在接口的实现上,但是类也可以有匿名内部类.

public class Wrapping {
    private int i;
    public Wrapping(int x) { i = x; }
    public int value() { return i; }
}
public class Parcel8 {
    public Wrapping wrapping(int x) {
        return new Wrapping(x) {
            @Override
            public int value() {
                return 1;
            }
        };
    }
    public static void main(String[] args) {
        Parcel8 wrapping = new Parcel8();
        System.out.println(wrapping.wrapping(3).value());//结果是1
    }
}

Wrapping是一个类,但是Parcel8中的方法可以返回它的匿名内部类,并且重写了value方法,main方法执行后,输出和预期一样,是1.

2. 带参数的匿名内部类

public class Pracel10 {
    public Destination destination(String dest, float price) {
        return new Destination() {
            private int cost;
            {
                cost = Math.round(price);
                if(cost > 100) {
                    System.out.println("Over budget!");
                }
            }
            private String label = dest;
            @Override
            public String readLabel() {
                // TODO dest-generated method stub
                return label;
            }
        };
    }
    public static void main(String[] args) {
        Pracel10 p = new Pracel10();
        Destination d = p.destination("Test", 101.3f);
        System.out.println(d.readLabel());
    }
}

destination方法中的匿名内部类,定义了cost变量,然后通过构造块初始化cost值,需要注意的是,destination方法的参数必须是final类型的,如果中途dest和price参数有变化,会报编译错误.

匿名内部类的缺点就是初始化值只有一个构造块,因为没有名称,所以不能重载构造方法,而且匿名内部类只能继承一个类,无法实现其他接口.

 

posted @ 2023-02-04 23:00  随意的马蒂洛克  阅读(9)  评论(0编辑  收藏  举报