如何在外部调用内部匿名类

1.什么是内部匿名类

有时候需要一个类的实例来完成一些逻辑,比如Thread的内部匿名类,新起一个线程做数值计算。 这个实例只会调用一次,为了方便定义和调用,便产生了内部匿名类

2.内部匿名类的创建方式

new 父类构造器(参数列表) | 实现接口()
{

}

3.如何在外部调内部匿名类

public abstract class Person(){
    public abstract void eat();
}

Person person = new Person(){
    public void eat(){
        print("I can eat ");
    }
}

4.为什么内部匿名类的形参必须是final的

内部匿名类的编译实现
public class OuterClass$InnerClass {
public InnerClass(String name,String age){
this.InnerClass$name = name;
this.InnerClass$age = age;
}
public void display(){
System.out.println(this.InnerClass$name + "----" + this.InnerClass$age );
}
} 因为内部匿名类的构造器只会拷贝形参的引用,如果形参发生变化,内部匿名类其实是接收不到变化后的引用对象,所以为了避免理解上的差错,内部匿名类的形参必须是final的

5.如何在内部匿名类中做初始化

可以在内部匿名类中使用代码块,将初始化放入初始块中 public abstract class Person(){ public abstract void eat(); }

Person person = new Person(){
    String name;
    int age;
    {
        name = "mac";
        if(age>0&&age<120){
           age =10;
        }
    }
    public void eat(){
        print("I'm"+name+" can eat ");
    }
}
注意事项

1.内部匿名类只能调用一次

2.内部匿名类必须继承一个类或接口,但也只能二选一

3.内部匿名类没有构造器

4.内部匿名类中不能有静态变量和静态方法

5.内部匿名类不能是抽象的,它必须实现它的父类方法或接口方法

转载于:https://my.oschina.net/u/3638962/blog/1575857

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值