抽象类
抽象类
用关键字abstract修饰的类叫做抽象类,抽象类不能被实例化,即不能new出来一个抽象类的对象(实例)。
?注:抽象类可以定义引用,可以用这个引用去访问子类实例对象.
抽象方法
用abstract关键字所修饰的方法叫做抽象方法。
抽象类和抽象方法的关系
抽象类的用途
抽象类的抽象方法定义一个规范,或者叫做约定,具体实现交给子类来做。
因为抽象类的实现可能无法完成或者没有意义。
举个例子:
定义一个抽象类Shape,然后Triangle,Circle和Rectangle等继承Shape,Shape中定义一个抽象方法计算面积,然后各个子类中实现这个方法,计算各自的面积。
这时候如果不用抽象类和抽象方法,即Shape类是一个普通的类,也可以完成这样的功能,即通过用子类方法覆盖父类方法的方式。但是此时父类,即Shape中的方法就要提供具体的实现,首先不知道怎么计算这个抽象的形状的面积,如果父类面积定义一个常数,如0或1,又显得意义不明晰。
?
接口
接口技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。接口不是类,而是一组对类的需求描述,这些类要遵从接口描述的统一格式进行定义。一个类可以实现(implement)一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。
接口的特征
?
note:
C++允许一个类有多个超类,此特性称为多继承(multiple inheritance),而Java的设计者选择了不支持多继承,使用接口机制来实现多继承的大部分功能。
抽象类vs接口
联系
?
?
区别
多态
所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。
关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。(见下面的多态文章链接)。