[英]Interfaces with abstract classes inheritance
嘿伙计们,我是 Java 的新手,我在掌握接口、抽象类等方面遇到了一些麻烦。所以在这里我遇到了这个我不确定要解决的问题。 基本上我有一个接口,它应该由抽象 class 实现,而抽象 class 应该是“有”(不知道正确的术语是什么)一些其他类。现在我想我做了第一部分:
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;
}
}
所以首先我需要让抽象 class 覆盖方法并使用 getter 来获取值,而不是我需要扩展抽象 class 使用超级构造函数来调用方法 getName 等。(希望我做对了)现在在class 商品我怀疑有 2 个构造函数第一个(文章文章)被怀疑将数量的值设置为 0,这对我来说没有意义,不应该在第二个构造函数中完成吗?现在问题是什么时候我尝试编译商品 class 我收到一个错误,说我需要使 class 抽象或覆盖方法 getDescription()。 有什么办法可以避免这种情况吗?
谢谢!
看起来好像您正在尝试实现装饰器模式: Merchandise
既是Article
又具有Article
。
您的Merchandise
class 基本上包装了现有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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.