gpt4 book ai didi

java - "Overriding"子类型 : Possible risks? 中的实例变量

转载 作者:行者123 更新时间:2023-11-29 09:50:58 25 4
gpt4 key购买 nike

假设我有一个类 SuperClass 和两个继承自 SuperClass 的子类 SubClassA 和 SubClassB。

 abstract class SuperClass{
...
List someList;
...
}

class SubClassA extends SuperClass{
...
List<String> someList;
...
}

class SubClassB extends SuperClass{
...
List<Integer> someList;
...
}

这样很方便,因为我可以在 Superclass 中获取 someList.size() 并在子类中具有 Typesafety。问题是它“感觉”不对,你能想到这个方法有我不知道的潜在危险吗?

最佳答案

一方面,SuperClass 的任何方法都会看到父类(super class)列表,而不是子类的列表。这几乎肯定会导致细微的错误。例如。当你说

I can get someList.size() in Superclass

您实际得到的是 Superclass 中列表的大小,而不是子类的大小。父类(super class)列表可能为空,而子类列表包含元素(反之亦然)。

这背后的原因是 SubClassA.someList 不会以任何方式替换或覆盖 Superclass.someList - 它只是隐藏它,所以子类方法见 SubClassA.someList 而不是 Superclass.someList。但是,这对 Superclass 完全没有影响。方法可以是虚拟的(在 Java 中,它们是默认的),但数据成员不能。

关于java - "Overriding"子类型 : Possible risks? 中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com