接口是完全抽象的成员集合,他的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同。接口的实现完全留给开发者去做。
Java中:
类只能是从一个基类继承,所以如果要使用抽象类为一组类提供多态性,这些类必须都是从那个类继承的
接口不但可以用一个类或结构实现多个接口,一个接口还可以有多个实现
如果预计要创建组件的多个版本,我们应该创建抽象类。这是因为,抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。这是好处,当然也是问题.另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。所以,如果创建的功能将在大范围的全异对象间使用,则使用接口。”------:“能不能这样说,抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。”
接口本身就是定义规范的,只有空方法名,没有实现,所以接口继承接口以后也没必要重写!
如果一个类继承自抽象类,而没有实现这个抽象类中所有的抽象方法,那么这个类还是抽象类,还不能new出来实例!
抽象类
声明抽象类需要使用abstract关键字。
不能实例化抽象类的实例对象。
可以创建抽象类的引用。
可以使用抽象类引用指向其子类的实例。
抽象类可以包含非抽象方法、抽象方法及实例属性。
抽象类可以没有抽象方法。
不能使用final关键字修饰抽象类。
具有一个或多个抽象方法的类,必须声明为抽象类。
抽象方法
声明抽象方法需要使用abstract关键字。
抽象方法不能有方法体。
抽象方法使用一个分号代替方法体。
抽象方法是用来让子类覆盖的。
抽象方法不能使用final关键字修饰,因为final方法表示不能被子类覆盖。
抽象方法必须是实例方法,所以不能使用static关键字修饰。
抽象方法不能使用private关键字修饰,因为private方法是隐式的final方法。
继承抽象类
扩展抽象类时,有两种选择。可以不覆盖部分或全部抽象方法,但这时该类也必须是抽象类。(因为该类还存在抽象方法,所以它学是“半成品”);或者定义所有的抽象方法,这样该类就可以不再声明为抽象类了。
因为接口都是抽象方法。所以在实现它的时候要全部覆写这些方法。
如果有个类,只想实现其中的一部分方法::
在接口与这个类中间可以加一个抽象方法:
抽象类去覆写接口中的所有方法,而那个类去继承这个抽象类,根据需要覆写抽象类中的方法。
接口跟类差不多,关键是interface,里面只能有函数定义和常量,不能有变量和实现的方法。