鍍金池/ 問答/Java/ Java繼承問題

Java繼承問題

上代碼

父類:

public class Father {
   private String name="father";

   public String getName(){
      return this.name;
   }
}

子類:

public class Son extends Father{
    private String name="son";


/*    public String getName(){
        return name;
    }*/

    public static void main(String[] args) {
        Son test=new Son();
        System.out.println(test.getName());
    }
}

我本以為結(jié)果輸出是:

son

但實(shí)際結(jié)果是

father

打斷點(diǎn)調(diào)試截圖如下:

clipboard.png

變得更加疑惑,這里顯示的this明明是子類Son,但是調(diào)用getName方法時(shí)獲取的卻是父類的name屬性呢?

在繼承多態(tài)中:
1、對(duì)于方法的覆蓋,new的誰就調(diào)誰,這就是多態(tài)。
2、對(duì)于成員變量的覆蓋,this在哪個(gè)類就指向哪個(gè)類的成員變量,沒有多態(tài)。

關(guān)于我的理解是否正確,如果正確,那么為什么Java要這樣設(shè)計(jì),而不是與方法一樣有著相似的多態(tài)呢?

請(qǐng)教大家,謝謝!

回答
編輯回答
氕氘氚

對(duì)于代碼:子類沒有g(shù)etName方法,當(dāng)然是去父類中調(diào)用父類的方法,輸出也就是father了。
對(duì)于多態(tài):多態(tài)的實(shí)現(xiàn)方式是子類的對(duì)象指向父類的引用,在你的代碼中,對(duì)象是new Son(),是子類,引用test也是子類,所以并沒有存在多態(tài)。

2017年1月26日 07:11
編輯回答
萌二代

私有字段并不會(huì)被覆蓋。

2017年9月22日 21:32
編輯回答
貓館

繼承的概念沒有完全弄懂。
Son繼承Father,在這里繼承到的是里面的getName()方法,而被修飾為private的私有屬性和方法是不會(huì)被繼承的,而在Son類中你并沒有重寫getName()方法,所以在你實(shí)例化Son類時(shí):Son test=new Son();,會(huì)先進(jìn)父類的構(gòu)造器,初始化父類中的屬性,之后調(diào)用的getName()方法是父類中的方法,而父類中的name屬性被初始化為了"Father",所以輸出的是"Father"。Son類中的private String name="son";是一段廢代碼,并沒有任何實(shí)際用處,不會(huì)被調(diào)用的,你可以將鼠標(biāo)移至該屬性上,會(huì)提示你這個(gè)屬性沒有被用到。

2017年6月24日 11:57