大家好,我是Java的新手,我在摆脱接口,抽象类等问题时遇到了一些麻烦。所以在这里,我有这个问题我不确定要解决。基本上,我有一个接口,应该由一个抽象类实现,并且那个抽象类应该“另外”拥有几个其他类(不确定什么是正确的术语)。现在,我认为我做了第一部分:
abstract class AbstractArticle implements Article {
final private String name;
final private double price;
final private String description;
AbstractArticle(String name,double price,String description) {
this.name = name;
this.price = price;
this.description = description;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String getDescription() {
return description;
}
class Accessory extends AbstractArticle {
final String instructionsForUse;
Accessory(String name, double price, String description, String instructionsForUse) {
super(name,price,description);
this.instructionsForUse = instructionsForUse;
}
public String getinstructionsForUse() {
return instructionsForUse;
}
class Merchandise implements Article {
final private int quantity;
Article article;
Merchandise(Article article) {
this.article = article;
quantity = 0;
}
Merchandise(Article article, int quantity) {
this.article = article;
this.quantity = quantity;
}
public int getQuantity() {
return quantity;
}
public Article getArticle() {
return article;
}
}
因此,首先,我需要使抽象类重写方法并使用getter获取值,而不是我需要使用超级构造函数来扩展抽象类以调用方法getName等。(希望我做对了)现在我在类商品中有两个构造函数,第一个(第Article文章)被设置为将value的值设置为0,这对我来说是没有意义的,不是应该在第二个构造函数中完成吗?问题是,当我尝试编译Merchandise类时,出现一条错误消息,提示我需要使该类抽象化或重写方法getDescription()。有什么办法可以避免这种情况?
谢谢!
答案 0 :(得分:0)
似乎您正在尝试实现Decorator Pattern:Merchandise
是 Article
和都有 Article
。
您的Merchandise
类基本上包装了一个现有的Article
并向其中添加了一个quantity
字段。这个想法是Merchandise
是“ Article
有数量”。
如果您希望能够将Merchandise
实例视为Article
,则需要定义在Article
接口中声明的方法。大概这里的想法是让那些方法返回包裹的Article
实例返回的相同内容,您可以这样做:
class Merchandise implements Article {
final private int quantity;
Article article;
Merchandise(Article article) {
this.article = article;
quantity = 0;
}
Merchandise(Article article, int quantity) {
this.article = article;
this.quantity = quantity;
}
public int getQuantity() {
return quantity;
}
@Override
public String getDescription() {
return article.getDescription();
}
// and similarly for any other methods declared in Article
// you might not really want (or need) this:
public Article getArticle() {
return article;
}
}