簡體   English   中英

Java和C ++中的實例變量

[英]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.xChild.x 引用類型確定您用.x表示哪個字段

對於Java端,您需要聲明2個單獨的變量

意味着對於Child ccx((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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM