据我了解,在 java 中所有变量都是引用。
下一段代码:
class Parent {
public int x = 12;
}
class Child extend Parent {
public int x = 42;
}
Parent p = new Parent();
System.out.println(p.x);
12
Child c = new Child();
System.out.println(c.x);
42
p = c; // be careful here!
System.out.println(p.x);
12
我认为这里没有切片,因为我们谈论的是引用。出于这个原因,我不明白为什么要打印 "12"
。 p
现在指向c
的区域,c.x
为42。
同样的事情发生在下一个 C++ 代码中:
class Parent {
public:
void example () { cout << "Parent" << endl; }
};
class Child : public Parent {
public:
void example () { cout << "Child" << endl; }
};
Parent * p = new Parent();
p->example()
Parent
Child * c = new Child();
c->example()
Child
p = c; // be careful here!
p->example()
Parent
最佳答案
您是在隐藏成员,而不是覆盖成员。对于 Java 示例,您不能覆盖字段。你需要使用一个函数。对于 C++ 示例,您在 Parent
中的函数必须是虚拟的才能被 Child
覆盖。否则,您只需隐藏该功能即可。
C++:
class Parent {
public:
virtual void example () { cout << "Parent" << endl; }
};
class Child : public Parent {
public:
void example () { cout << "Child" << endl; }
};
关于java - java和c++中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386508/