我有这个
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;
}
现在,我有很多从
UnCoolPeople
或CoolPeople
继承的类。当我使用此功能调用它们时:
if (person instanceof ICool ) {
if (person.isCool()) {
// do something
}
}
问题是,每当调用此
person.isCool()
时,它就会调用abstractCoolness
类并返回始终为false的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()
将始终返回在isCool
中定义的AbstractCoolness
变量,其他变量则不会影响它。由于default value of a boolean是false
,它将永远不会返回true
。您可以通过在基类中创建一个采用布尔
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);
}
}