gpt4 book ai didi

java - 当只需要指定一个子类时,如何利用多态来设计?

转载 作者:行者123 更新时间:2023-12-02 04:31:08 24 4
gpt4 key购买 nike

给定一个基类Base,即ABC扩展Base。如果只有C中有一个特定的方法m()。要调用 m() ,您应该首先确定给定的类是否为 C 类型,其中一种方法是使用:

otherMethod(Base b){
if(b instanceof C)
b.m();
}

但我想使用:

otherMethod(Base b){
b.m();
}

这意味着我必须将 m() 方法拉到父类(super class) Base 中,并且仅在类 C 中实现它。但是m()与类AB没有关系,不应该属于它们。这对于代码的可读性来说并不直观。那么这个案例有没有更好的设计来使用多态性并且没有不合理的方法位置呢?

最佳答案

如果类 C 具有任何特定方法,则该方法不应成为 Base 类的一部分。要调用方法 m(),您必须使用 instanceof 运算符检查实例的类型,然后将您的 Base 类转换为 C 然后调用方法 m() 如下所示

otherMethod(Base base){
If(base instanceof C){
C c= (C) base;
c.m();
}
}

此外,正如其他人已经引用了CollectionList的例子,如果你的类C需要有特定的方法,你应该创建一个接口(interface),假设它名为Child,它应该扩展Base接口(interface)。其他 2 个类应该实现 Base 接口(interface)。并且类 C 应该实现 Child 接口(interface)。

现在,当你设计Base接口(interface)时,你肯定不会知道其他类可以实现哪些具体方法。因此,您也不应该在 otherMethod 中调用任何特定方法。

关于java - 当只需要指定一个子类时,如何利用多态来设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56584433/

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