[英]Instance variable in java and c++
據我了解,在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
的面積,而cx
是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中,您不能覆蓋字段,而只能將其隱藏。 子級有兩個字段Parent.x
和Child.x
。 引用類型確定您用.x
表示哪個字段
對於Java端,您需要聲明2個單獨的變量
意味着對於Child c
有cx
和((Parent)c).x
是具有各自值的不同變量
這是因為您使用的是px,而不是cx。Child不會覆蓋字段x(例如,方法getX()會被覆蓋)。 而是在子對象中,它對應於Child類。 因此,您實際上有2 x:Parent.x和Child.x。
在Java中,您只能隱藏字段而不能覆蓋它。 For Java
p=c
現在p有c的參考,因此您得到答案= 12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.