日期:2014-05-20  浏览次数:20604 次

关于抽象类?
[code=Java][/code]
abstract class WindowAdapter implements Window{
public void open(){} ; // 打开
public void close(){} ; // 关闭
public void activated(){} ; // 窗口活动
public void iconified(){} ; // 窗口最小化
public void deiconified(){};// 窗口恢复大小
}

又麻烦大家了。(上面是我在一本书上看到的)
问:上面的类WindowAdapter 是“抽象”的吗?
疑问:
1. 形如:fun();的称是抽象方法,
2.但是:fun(){};好像不是抽象方法吧。
3.抽象方法好像必须用abstract标识吧。




------解决方案--------------------
WindowAdapter 不是抽象类。

其实,在设计模式里面,所有的适配器类都不是抽象的,它只是存在空方法或者默认执行的步骤而已。

从语法角度上来讲,没有 abstract 关键字的方法,就不是抽象方法;没有 abstract 关键字的类,就不是抽象类(接口除外)。
------解决方案--------------------
抽象类中的方法的方法体可以不写,也可以由默认实现 ,继承于它的子类 ,如果父类中没有写方法体的(即方法后面没{})的 ,必须要写
------解决方案--------------------
1 不是抽象类必须有抽象方法,如果不需要一个类的实例,可以把类定义成抽象类.(只使用静态方法.).
2 楼主举的例子可以理解成 这个抽象类在Window接口和使用这个接口的类之间架了座桥梁。 其目的是为了方便编写我们实现接口的代码。
比如,我们写一个类,要实现Window接口,必须把这个接口里的方法全部覆写,(否则我们只能命名为抽象类,不能实例化),但我们只需要其中一个方法,(比如关闭窗口)。那我们也得把其余4个方法都覆写,及使什么都不干。
有了那个抽象类,情况就简单了。我们继承这个类,那些接口里的方法都由抽象类覆写了。(都不再是抽象的了)。那我们在自己的类里只要覆写用到的那个方法就行了,不用再去覆写其余4个了。(抽象类提我们覆写了)。
4楼这样写好像没意义了。