抽象类和接口
Posted leiwang1996
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类和接口相关的知识,希望对你有一定的参考价值。
一抽象类
抽象类(abstractclass):一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类,在类头用abstract修饰符表示。
抽象方法(abstract method):只有方法声明,而没有具体方法体的方法。这样的方法称为抽象方法。在方法头用abstract修饰符表示。
下面以GeometricObject类说明:
public abstract class GeometricObject {
//Data fields, constructors, and partial methods omitted here
/** Abstract method getArea */
public abstract double getAreaO;
/** Abstract method getPerimeter */
public abstract double getPerimeter();
}
public class Circle extends CeometricObject {
// omitted
}
public class Rectangle extends CeometricObject {
// omitted
}
GeometricObject类定义成 Circle 类和 Rectangle 类的父类。GeometricObject 类模拟了几何对象的共同特征。Circle 类和 Rectangle 类分别包含计算圆和矩形的面积和周长的方法 getArea()和 getPerimeter()。因为可以计算所有几何对象的面积和周长,所以最好在 GeometricObject类中定义 getArea ()和 getPerimeter() 方法。但是,这些方法不能在 GeometricObject类中实现,因为它们的实现取决于几何对象的具体类型。所以把GeometricObject类定义成抽象类, getArea()和 getPerimeter()定义成抽象方法。
注:1.抽象类不能用new操作符创建它的实例,除此之外和常规类一样。
2.包含抽象方法的类一定是抽象类,而抽象类不一定有抽象方法。
3.子类的父类是具体的,子类也可以是抽象的。
4.抽象方法必须是非静态的。
二接口
1.接口:指明相关或者不相关类的多个对象的 共同行为。例如,使用正确的接口,可以指明这些对象是可比较的、可食用的,以及可克隆的。 例如,Java 的Comparable 接口采用下面的语法来定义接口:
// Interface for comparing objects, defined in java.lang package java.lang;
public interface Comparab1e<E> {
public int compareTo(E o) ;
}
compareTo 方法判断这个对象相对于给定对象o的顺序,并且当这个对象小于、等于或 大于给定对象 o时,分别返回负整数、0或正整数。
2.接口继承:类和接口之间的关系称为接口继承,使用implements关键字完成。例如:
abstract class Fruit inplements Edible {
//Data fields, constructors, and methods omitted here
}
使用 Edible 接口来明确一个对象是否是可食用的,Fruit 类实现了 Edible 接口以表明水果是可食用的。
三接口与抽象类
1.定义
接口的使用和抽象类的使用基本相似,接口只包含常量和抽象方法,而抽象类还包含变量和具体方法。定义一个接口与抽象类有所不同,如下表:
2.扩展
Java 只允许为类的扩展做单一继承,但是允许使用接口做多重扩展。例如,
public class NewClass extends Basedass implements Interface1,… ,InterfaceN {
…
}
3.使用
接口和抽象类都可以用于为对象指定共同的行为。
采用类来建模:比较强的 is-a(是一种)关系清晰地描述了父子关系,应该采用类来建模。例如,因为 桔子是一种水果,它们的关系就应该采用类的继承关系来建模。圆或者矩形是 一个几何对象,因此 Circle 可以设计为 CeometricObject 的子类。
使用接口建模:弱的 is-a关系,也称为 iskind-of(是一类)关系,表明一个对象拥有某种属性。弱的 is-a 关系可以使用接口建模。例如,所有的字符串都是可以比较的,因此 String 类实现了 Comparable 接口。圆有不同的半径,并且可以基于半径进行比较,因此 Circle 可以实现 Comparable 接口。
接口比抽象类更加灵活,因为一个子类只能继承一个父类,但是却可以实现任意个数的接口。
以上是关于抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章