【问题标题】:Create an instance of subclass inside superclass在超类中创建子类的实例
【发布时间】:2021-07-31 18:16:36
【问题描述】:

每当我创建一个超类的实例时,我希望它自动创建一个子类的实例。然后我可以从超类的实例访问子类。

这里我有一个超类名称“SortArticles”:

public class SortArticles {
    private String title;
    private String linkToFullArticles;
    private FullArticle fullArticleObject;
    
    public String getTitle() {
        return this.title;
    }
    
    public FullArticle getFullArticleObject() {
        return this.fullArticleObject;
    } 
}

这里我有一个子类名称“FullArticle”:

public class FullArticle extends SortArticles {
    
    private List<Label> labelList;

}

我想这样打电话:

ArrayList<SortArticles> sortList = new ArrayList<>();
sortList.add(new SortArticles());
sortList.get(0).getFullArticleObject().getTitle;

有可能做到吗?我想用HashMap来链接sort和full,但是我需要创建2个arraylist,然后手动链接。

【问题讨论】:

  • 永远不要那样做。这是非常糟糕的设计。
  • 没有。您没有使用 this 返回您的子类/子类 (FullArticle) 的实例,因为 this 关键字是对 current 实例的引用,在您的情况下,它正在成为超类 (SortArticles)。
  • 那么解决办法是什么。如何在子类和超类之间建立联系?我只希望我添加到超类实例中的所有数据都可以通过子类实例获取
  • 这个问题很可能是XY Problem 类型的问题。解决方案可能是从一开始就改进您的设计,而不是链接子类和超类。
  • 你可以在getFullArticleObject那里使用抽象类吗?

标签: java polymorphism subclass superclass


【解决方案1】:

你误解了继承的概念。

你可以说,那条狗是一种动物,但你不知道,一般来说,这种动物肯定会吠叫。

获得父母财产的是孩子,反之则不然。当您实例化一些 SuperClass 时,它不会与它的子类成员一起实例化,它应该永远被实例化。

例如,如果您实例化java.lang.Object,它不应该(也永远不会)有您的(假设是)Employee 类的任何成员;但是,您的 Employee 将始终继承其所有父级的所有非私有成员。

此外,假设您有一百个类扩展了一个SuperClass。您是否期望(或者毕竟您希望)SuperClass 的实例包含所有派生自它的所有一百个类的所有非私有成员? java.lang.Object 的实例是否应包含类路径上可用的所有非私有基础结构?

不,那很糟糕,那是错误的,那不合逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2021-03-14
    相关资源
    最近更新 更多