抽象类

在继承的层次结构中,随着每个新子类的出现,类会变得越来越明确和具体。如果从一个子类追溯到父类,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类。

把一个GeometricObject类定义成Circle类和Rectangle类的父类。GeometricObject类模拟了几何对象的共同特征。Circle类和Rectangle类都包含分别计算圆和矩形的面积和周长的方法getArea()和getDiameter()。因为可以计算所有几何对象的面积和周长,所以最好在GeometricObject类中定义getArea()和getDiameter()方法。但是,这些方法不能在GeometricObject类中实现,因为它们的实现取决于几何对象的具体类型。这样的方法称为抽象方法,在方法头中使用abstract修饰符表示。在GeometricObject类中定义了这些方法后,GeometricObject就成为一个抽象类。在类头使用abstract表示该类为抽象类。例如下面源代码:

public abstract class GrometricObject {
   private String color = "white";
   private boolean filled;
   private java.util.Date dateCreated;

   protected GrometricObject() {
      dateCreated = new jva.util.Date();
   }

   protected GeometricObject(String color, boolean filled) {
      dateCreated = new java.util.Date();
      this.color = color;
      this .filled = filled;
   }

   public String getColor() {
      return color;
   }

   public void setColor(String color) {
      this.color = color;
   }

   public boolean isFilled() {
      return filled;
   }

   public void setFilled(boolean filled) {
      this.filled = filled;
   }

   public java.util.Date getDateCreated() {
      return dateCreated;
   }

   public String toString() {
      return "created on " + dateCreated + "\ncolor: " + color + "and filled: " + filled;

   public abstract double getArea();

   public abstract double getPerimeter();
}

 抽象类和常规类很像,但是不能使用new操作符创建它的实例。抽象方法只有定义而没有实现。它的实现由子类提供。一个包含抽象方法的类必须声明为抽象类。

抽象类的构造方法定义为protected,因为它只被子类使用。创建一个具体子类的实例时,它的父类 的构造方法被调用以初始化父类中定义的数据域。

抽象类GeometricObject为几何对象定义了共同特征(数据和方法),并且提供了正确的构造方法。因为不知道如何计算几何对象的面积和周长,所以,getArea和getDiameter定义为抽象方法。这些方法在子类中实现。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值