gpt4 book ai didi

java - 动态调用——带有接口(interface)和抽象类的java

转载 作者:行者123 更新时间:2023-11-29 07:51:42 24 4
gpt4 key购买 nike

我有这个

public interface ICool {
public boolean isCool();
}

现在我得到了这个层次结构:

public abstract class AbstractCoolness implements ICool{
private isCool;

@Override
public boolean isCool() {
return this.isCool;
}
}

public abstract class CoolPeople extends AbstractCoolness {
protected boolean isCool= true;
}

public abstract class UnCoolPeople extends AbstractCoolness {
protected boolean isCool= false;
}

现在我有很多继承自 UnCoolPeopleCoolPeople 的类。

当我用这个函数调用它们时:

if (person instanceof ICool ) {     
if (person.isCool()) {
// do something
}
}

问题是,每当调用此 person.isCool() 时,它都会调用 abstractCoolness 类并返回 this.isCool,这总是错误的.

知道为什么当我对从 CoolPeople 扩展的人使用此函数时我仍然得到 isCool() == false 吗?

最佳答案

非常简单。此代码将返回 isCool 的值:

public abstract class AbstractCoolness implements ICool{
private isCool;

@Override
public boolean isCool() {
return this.isCool;
}
}

而这段代码将简单地在子类中设置一个名为 isCool 的新变量,并隐藏在 AbstractCoolness 中找到的基成员。

public abstract class CoolPeople extends AbstractCoolness {
protected boolean isCool= true;
}

isCool() 方法将始终返回AbstractCoolness 中定义的isCool 变量,其他不会影响它。自 default value of a booleanfalse,它永远不会返回 true

您可以通过在基类中创建一个采用 boolean 值 isCool 的构造函数并通过子类的构造函数传递它来绕过此问题。

解决方案的快速草图:

abstract class AbstractCoolness {
private isCool;

public AbstractCoolness(bool iscool){
isCool = iscool;
}

public boolean isCool() {
return this.isCool;
}
}

class CoolPerson extends AbstractCoolness {
public CoolPerson() {
super(true);
}
}

关于java - 动态调用——带有接口(interface)和抽象类的java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20638561/

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