重寫和過載是針對方法的,子類的變數可以覆蓋父類的變數,但是不能改變父類的變數。
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...
父類中訪問子類成員
一般情況下來說,父類的中的成員往往是最委屈的,子類要是有個同名 僅僅需要名字一樣 成員,自己的成員就會被隱藏,子類還可以訪問自己的非私有成員,但是自己想訪問子類中的成員就不行,當子類與自己有同名的成員時,訪問到的是自己的成員,沒有同名成員時意圖直接訪問子類成員則直接報錯 這是何等悲慘,為此,我們應該...