Java 关于匿名内部类语法的思考

蚂蚁最近在学习Java和Android时,遇到了一个匿名内部类语法的使用问题。
很多书籍,包括网络,都有特别指出:匿名内部类必须在抽象类或接口的基础上,才可以定义。

比如:
interface AnInterface{
void info();
}
abstract class AnAbstractClass{
abstract void info();
}
完全可以使用匿名内部类语法:
public class Test {
public static void main(String[] args) {
AnAbstractClass aac = new AnAbstractClass() {
@Override
void use(){
;
}
};
AnInterface ai = new AnInterface() {
@Override
public void info() {
;
}
};
}
}

但是查阅权威书籍**《Thinking in Java》**Fourth Edition后,发现该书中提到,这种语法它指的是“创建一个继承自父类的匿名类的对象”。也就是说,即便是一个普通类,也是可以使用这种语法的。

实际代码测试:

class PureClass {
//方法体为空,子类可根据具体需求,具体实现此方法。
void show(){
}
}
public class Test {
public static void main(String[] args) {
PureClass pure = new PureClass(){
@Override
void show(){
System.out.println(“具体实现,覆写了父类PureClass的show方法。”);
}
};
pure.show();
}
}

以上代码,编译运行正常。我们可以看到,PureClass只是一个普通类,既不是抽象类,也并非接口。而我们的匿名抽象类这种语法,依然可以正常使用。

另一个引发我对这个语法进行思考的,是android.os.Handler类。进入SDK,查阅Handler的源代码,我们会看到类名和方法的具体定义:

public class Handler {
/**
* Subclasses must implement this to receive messages.
*/
public void handleMessage(Message msg) {
}
}

Handler类既不是抽象类,也不是接口,但我们在安卓中使用Handler进行信息传递时,需要覆写handleMessage方法:

Handler handle = new Handler(){
@Override
public void handleMessage(Message msg){
//具体操作代码省略
}
};

当然,蚂蚁的思考,也有可能有不正确的地方,还请各位前辈和朋友们,多多指点。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值