Java中關於子類成員變數與父類成員變數同名

2021-07-22 21:35:50 字數 865 閱讀 9888

重寫和過載是針對方法的,子類的變數可以覆蓋父類的變數,但是不能改變父類的變數。

class animals {  

int age = 10;

class dogg extends animals {  

int age = 20; 

animals a = new animals();

system.out.println(a.age);  

dogg d = new dogg();  

d.enjoy();  

system.out.println(d.age);  

animals d1 = new  dogg();  

d1.enjoy();       

system.out.println(d1.age);  

dogg s = (dogg)d1;  

system.out.println(s.age); 

列印結果:

animals enjoy!

10dog enjoy!

20dog enjoy!

1020

由此可見,父類和子類的變數是同時存在的,即使是同名。

子類中看到的是子類的變數,父類中看到的是父類中的變數。

它們互相隱藏,而同名的方法則是實實在在的覆蓋(重寫)。

如animals d1 = new dogg();

d1即是乙個animals的物件,也是乙個dogg的物件,

那麼呼叫方法時,是根據物件的實際型別呼叫的,

實際型別是dogg,所以永遠呼叫子類的方法。

而訪問成員變數就不同了,它是animals時,訪問的是父類的成員變數,

轉型為dogg的話,訪問的就是子類的成員變數了。

Java中關於子類成員變數與父類成員變數同名

重寫和過載是針對方法的,子類的變數可以覆蓋父類的變數,但是不能改變父類的變數。class animals class dogg extends animals public class testduotai 列印結果 animals enjoy 10dog enjoy 20dog enjoy 102...

子類繼承父類的成員變數

1 子類可以繼承父類的成員變數 只能繼承public 和protected,不能private 2 子類拿到的父類的成員變數值是初始化的值。3 如下面classb繼承classa,只能拿到初始化的a的值。int classa a 0 int main class classa include std...

父類中訪問子類成員

一般情況下來說,父類的中的成員往往是最委屈的,子類要是有個同名 僅僅需要名字一樣 成員,自己的成員就會被隱藏,子類還可以訪問自己的非私有成員,但是自己想訪問子類中的成員就不行,當子類與自己有同名的成員時,訪問到的是自己的成員,沒有同名成員時意圖直接訪問子類成員則直接報錯 這是何等悲慘,為此,我們應該...