抽象类是否可以实例化?
---------------写到哪里就说到哪里,哈哈哈!
1. 抽象类可以实例化。
///////////////////////
大家看到了吧,抽象类竟然可以实例化,并且还调用了自己的抽象方法。
我做这个实验的想法来自API文档,大家知道WindowAdapter就是一个抽象类,但是他的所有成员方法都是空实现,既然已经实现了,为什么还要表示为abstract类呢?从适配器模式的角度看的话,API设计者认为适配器类中的成员方法,如下截图
![]()
根本没有定制业务逻辑的必要!原因很简单,每种事件发生的时候,程序员所需要的业务逻辑是不一样的,API的编写者何必再画蛇添足呢,增加了代码量,最重要的是自己实现的业务逻辑,程序员却不用,多累呀!!!
其实说某一个类一旦有abstract标识符,就会被编译器认为是有没有业务逻辑(方法体)的抽象方法。这仅仅是编译器一厢情愿的观点。但话又说回来了,你不让编译器舒服了,哈哈,编译器也不会让你好过的。
还有一点就是一个类一旦有abstract标识符的话,在实例化时候就必须有大括号,大括号里面是抽象方法的业务逻辑的填充处。如果没有抽象方法,或者是空实现,可以不用写,但是一旦有抽象方法就必须实现,如果不实现,编译器就会报错。如下
/////////////////
![]()
这个大括号与类的标识符abstract是生死相依的。
判断一个类是抽象类的标准是:此类有一些方法(一个或多个)这些方法没有方法体。此时这个方法必须显示的标识为abstract,于此同时这个类也要显示的标识为abstract。
分享到:
评论