抽象类和接口

一抽象类

  抽象类(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 接口。

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

 

 

转载于:https://www.cnblogs.com/leiWang1996/p/9656971.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值