我正在困扰一个奇怪的问题。 将子类传递给接受超类的方法时,因为子类是超类,所以子类的变量似乎发生了变化...... 有一个更明确的例子:
import std.stdio;
void main () {
SuperClass myspc = new SuperClass();
showSupID(myspc); // shows 0, ok
SubClass mysbc = new SubClass();
showSupID(mysbc); // shows 0 again, wtf ?
showSubID(mysbc); // shows 3, ok
}
class SuperClass {
int id;
}
class SubClass : SuperClass {
int id = 3;
}
void showSupID(SuperClass object){
writeln(object.id);
}
void showSubID(SubClass object){ // I want to avoid to have subclass specific methods
writeln(object.id);
}
在我的代码中,我希望通过使用它们与超类的关系来集中所有类的子操作。这种奇怪的行为对我来说是个大问题。
我忘记了什么吗?问题出在哪里?
感谢。
答案 0 :(得分:3)
变量不是多态的。 SuperClass
有一个名为id
的变量,而SubClass
有一个名为id
的不同变量,而SubClass
来自SuperClass
,它也是可以访问SuperClass
'id
,但前提是它明确访问{(1)super.id
内的代码中的SubClass
。由于id
不是多态的,因此访问它时id
取决于用于访问它的引用类型。如果引用的类型为SuperClass
,则访问的是SuperClass
'id
,而如果引用的类型为SubClass
,则为SubClass
'访问id
。
如果您需要多态行为,则必须使用public
或protected
函数。变量永远不会是多态的。