内部类二:匿名内部类

一 匿名内部类的定义

匿名内部类是继承某个类或者实现某个接口的没有类名的类,因为没有类名,所以需要类对象的创建与类的定义放在一条语句中。

二采用默认构造器创建匿名内部类

如下例:

接口Contents

package chapter10;

public interface Contents {
    int value();
}

创建一个实现了接口Contents的匿名内部类

package chapter10;

public class Pracel7 {
    public static void main(String[] args) {
        
        Contents content=new Contents() {
            private int i=11;
            @Override
            public int value() {
                return i;
            }};
    }
}

在上面的例子中,可以看到类的对象的创建与类的定义放在了一起。

三 采用有参构造器创建匿名内部类

如果是那种采用有参构造器创建匿名内部类对象,那么这个匿名内部类一定是一个带有有参构造器的类的子类,不能是一个实现了某个接口的匿名内部类,因为

Multiple markers at this line
- Interfaces cannot have constructors
- This method requires a body instead of a

例子:

含有有参构造器的类

package chapter10;

public class Wrapping {
    private int i;

    // 有参构造器
    public Wrapping(int x) {
        i = x;
    }

    public int value() {
        return i;
    }

}
package chapter10;

public class Parcel8 {
    
    public static void main(String[] args) {
        int i=10;
        //基于构造器创建匿名内部类
        Wrapping obj=new Wrapping(1) {
            
            public int value() {
                return super.value()*47;
            }
        };
        
        obj.value();
    }
    
}

四 匿名内部类使用外围类的局部变量,必须是final的

在jdk8以上,虽然外部类的局部变量传递到内部类中,可以不用final进行修饰,但是外部类的局部变量还是final的,是不允许修改的。

否则会报如下错误

Local variable dest defined in an enclosing scope must be final or effectively final

原文地址:https://www.cnblogs.com/cplinux/p/13085522.html