抽象类和接口

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 接口。

  接口比抽象类更加灵活,因为一个子类只能继承一个父类,但是却可以实现任意个数的接口。

 

 




以上是关于抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章

聊聊抽象类和接口

抽象类和接口的异同

抽象类和接口在一起?

java 抽象类和接口的差别

抽象类和接口

Java学习笔记—抽象类和接口