花了一些时间把头发拉出来。看似黑白,但我似乎无法让它发挥作用。在我的类中对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 :(
答案 0 :(得分:2)
您的代码看起来很好。重建它(你可能也想看看IntelliJ IDEA;))。另请遵循惯例并将您的课程重命名为RetailCustomer
。
抽象Customer类实现了一些只是简单访问器的方法。我的理解是,除非这些方法由retialCustomer以某种方式实例化,否则对象不会实例化,因为所有方法都需要实现?
你可能需要改写一下,因为它不清楚你的要求。所有子类都将继承父类的实现。即使您的父类是抽象的,如果您在类中实现了某些方法,那么所有子类都将继承这些实现。实际上,您仍然无法实例化您的抽象类,但您可以使用子类中的这些方法。
如果您对Customer
中的方法感到满意,则无需在RetailCustomer
中覆盖它们。
我正在尝试做什么:作为作业的一部分(所以请不要大提示,除非是我的IDE或其他什么)
1