接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
1,抽象类
普通的类—>抽象类—>接口
包含抽象方法的类叫做抽象类,对于C++来说,抽象方法就相当于纯虚函数,使用abstract关键字定义:
abstract void f()
abstract class f{}
2,接口
接口可以说是抽象类的进一步的抽象,因为在抽象类既可以有单纯的方法声明,也可以包含方法的实现;而对于接口来说,只能包含方法的声明。
一个接口表示:“所有实现了该特定接口的类看起来都像这样”。
定义方法:使用interface代替class
2.1 域的有关问题:
1,interface中声明的任何方法都是public,不管是否使用public这个关键字,这个应该是可以理解的,因为interface中的方法都是需要被其它类实现的
2,interface中的域都是static和final,在enum在java中出现以前,都是用interface来创建常量组的,自从在java SE5中引入了enum关键字之后,使用接口来定义常量群组就没什么意思了(本来就是干这事的~)
2.2 多重继承和接口的继承
1,使用过C++的同学都知道,在C++中是允许多重继承的,但是java中是不允许是多重继承的,即extends关键字后面只能跟一个类而不是多 个;interface是java中实现多重继承的一种方法,因为一个类可以实现多个接口即implements interface1,interface2,interface3…
需要注意的的一点是:当extends和implements同时使用时,extends必须在implements前面。
2,通过继承来扩展接口(今天第一次看到,原来interface间也可以继承)
interface Monster{void menace();}
interface DangerousMonster extends Monster{void destroy();}
class DragonZilla implements Dangerous
{
public void menace();
public void destroy();
}
注意组合接口时会出现名字的冲突
2.3,与interface有关的设计模式
1>策略设计模式(接口不同的实现产生不同的行为,与多态性相关)
2>适配器设计模式:我的理解就是已有的一个类为了适应已经存在的接口,
重新产生一个适配器,该适配器使用已有类的重新实现了原有的接口,这样就
看起来接口统一。
3>工厂设计模式:使用interface来实现工厂设计模式,另一个更加优雅的工厂实现
方式就是使用匿名内部类。