`
qwxi_1
  • 浏览: 8585 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
最近访客 更多访客>>
文章分类
社区版块
存档分类

SCJP(310-055)学习之旅———抽象类也可以实例化

阅读更多

抽象类是否可以实例化?

---------------写到哪里就说到哪里,哈哈哈!

 

1.              抽象类可以实例化。

///////////////////////

 

 

大家看到了吧,抽象类竟然可以实例化,并且还调用了自己的抽象方法。

 

我做这个实验的想法来自API文档,大家知道WindowAdapter就是一个抽象类,但是他的所有成员方法都是空实现,既然已经实现了,为什么还要表示为abstract类呢?从适配器模式的角度看的话,API设计者认为适配器类中的成员方法,如下截图

 

 

根本没有定制业务逻辑的必要!原因很简单,每种事件发生的时候,程序员所需要的业务逻辑是不一样的,API的编写者何必再画蛇添足呢,增加了代码量,最重要的是自己实现的业务逻辑,程序员却不用,多累呀!!!

其实说某一个类一旦有abstract标识符,就会被编译器认为是有没有业务逻辑(方法体)的抽象方法。这仅仅是编译器一厢情愿的观点。但话又说回来了,你不让编译器舒服了,哈哈,编译器也不会让你好过的。

 

还有一点就是一个类一旦有abstract标识符的话,在实例化时候就必须有大括号,大括号里面是抽象方法的业务逻辑的填充处。如果没有抽象方法,或者是空实现,可以不用写,但是一旦有抽象方法就必须实现,如果不实现,编译器就会报错。如下

 

 

 /////////////////

 

 

 

这个大括号与类的标识符abstract是生死相依的。

                                                                                      

判断一个类是抽象类的标准是:此类有一些方法(一个或多个)这些方法没有方法体。此时这个方法必须显示的标识为abstract,于此同时这个类也要显示的标识为abstract

 

分享到:
评论
1 楼 whitenegro 2008-05-19  
我晕   看着是实例化了抽象类,实际上是实例化了一个抽象类的匿名实现类
Global site tag (gtag.js) - Google Analytics