继承自抽象类

时间:2014-01-18 21:44:09

标签: java inheritance abstract

让我们假设我有一个抽象类:

public abstract class Customer {
  private int price;

  public void setPrice(int price) {
    this.price = price;
  }

  public int getPrice() {
    return price;
  }

  public abstract void pay(int n);
  public abstract void occupySpace();

}

我还有两个继承它的类:

  1. HandicappedCustomer,我想将价格设置为0。
  2. RegularCustomer,我想将价格设置为100。
  3. 现在,如果我创建每个类的实例并调用getPrice(),我将返回0。当我为类的每个相应实例调用getPrice()时,使它返回0和100的最简单方法是什么?

    当我尝试在setPrice(100)课程中调用RegularCustomer时,我发现它不起作用。说白了,我想在我的主要代码中使用以下代码:

    Customer a = new HandicappedCustomer(); 
    Customer b = new RegularCustomer();
    System.out.println(a.getPrice());
    System.out.println(b.getPrice());
    

    让它回归:

      

    0
      100

1 个答案:

答案 0 :(得分:4)

如果您希望getPrice 始终为普通客户返回100,始终为残障客户返回0,您可以写

class RegularCustomer extends Customer {
    public int getPrice() {
        return 100;
    }
}

class HandicappedCustomer extends Customer {
    public int getPrice() {
        return 0;
    }
}

但由于您在设计中加入了setPrice,因此并不完全符合您的要求(至少对于普通客户而言)。听起来你想要最初返回这些值。在那种情况下:

class RegularCustomer extends Customer {
    public RegularCustomer() {
        setPrice(100);
    }
}

class HandicappedCustomer extends Customer {
    public HandicappedCustomer() {
        setPrice(0);
    }
}

应该这样做。

如果您想稍后更改它们,它们都将继承setPrice,并且它们都将继承getPrice,因此一切都应按预期工作。

Live demo at ideone