繁体   English   中英

具有抽象类 inheritance 的接口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM