抽象类的子类不能看到构造函数

时间:2015-09-22 09:58:35

标签: java abstract-class

花了一些时间把头发拉出来。看似黑白,但我似乎无法让它发挥作用。在我的类中对java中的抽象类所做的事情进行了大量挖掘,但是无济于事。

我想做的事情:作为一项任务的一部分(所以请不要提供大的提示,除非它是我的IDE或其他什么),我将客户类抽象化,然后继续并从中做出一些子类。通过这种方式,抽象类将通过创建利用抽象类方法/属性的子类来实例化。和我一起到目前为止?

package customer;

abstract class Customer {
    private String id;
    private String name;

    public Customer(String id, String name) {
        this.id = id;
        this.name = name;
    }

    //accessors
    public double getDiscount(double amt) {
        double discount = 0;
        return discount;
    }
    public String getID() {
        return this.id;
    }
    public String name() {
        return this.name;
    }
}

摘要客户类,似乎都很好,简单,容易。现在是实体子类RetailCustomer

package customer;

public class RetailCustomer extends Customer {
    private double rateOfDiscount = 0.04;

    public RetailCustomer(String id, String name, double rate) {
        super(id, name);
        this.rateOfDiscount = rate;
    }
    //mutators
    public void setDiscount(double rate) {
        this.rateOfDiscount = rate;
    }
    //accessors
    public double getDiscount() {
        return this.rateOfDiscount;
    }
}

确定。再次,非常简单。 RetailCustomer扩展了Customer抽象类,并且应该使用抽象类构造函数,如

所示
public RetailCustomer(String id, String name, double rate) {
        super(id, name);
        this.rateOfDiscount = rate;
}

但是我的IDE(Eclipse)显示错误"构造函数Customer(String,String)未定义"。即使它在抽象类中明显存在。

注意:只需复制语法 https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

另外作为一个补充问题(我最有可能通过实验来解决):

抽象Customer类实现了一些只是简单访问器的方法。我的理解是,除非这些方法由retialCustomer以某种方式实例化,否则对象不会实例化,因为所有方法都需要实现?

提前感谢您提供的任何提示或指示。就像我说的那样,对我来说似乎很简单,但与此同时,获得zilch :(

1 个答案:

答案 0 :(得分:2)

您的代码看起来很好。重建它(你可能也想看看IntelliJ IDEA;))。另请遵循惯例并将您的课程重命名为RetailCustomer

  

抽象Customer类实现了一些只是简单访问器的方法。我的理解是,除非这些方法由retialCustomer以某种方式实例化,否则对象不会实例化,因为所有方法都需要实现?

你可能需要改写一下,因为它不清楚你的要求。所有子类都将继承父类的实现。即使您的父类是抽象的,如果您在类中实现了某些方法,那么所有子类都将继承这些实现。实际上,您仍然无法实例化您的抽象类,但您可以使用子类中的这些方法。

如果您对Customer中的方法感到满意,则无需在RetailCustomer中覆盖它们。

  

我正在尝试做什么:作为作业的一部分(所以请不要大提示,除非是我的IDE或其他什么)

1