子類是對父類的一種擴展,子類會從父類繼承絕大多數的方法,可是具體有那些呢,又有那些不能被子類繼承呢,本文主要就是我爲了總結而寫的,可能會不全。code
package com.z.extend; public class TestExtendsTwo { public static void main(String[] args) { person person= new person(); person.eat(); } } class Dog { private void eat() { System.out.println("狗吃?"); } } class BlackDog extends Dog{ }
如上代碼當你嘗試調用父類的私有方法時會提示你找不到這個方法,同理被final修飾的方法也不能找到blog
package com.z.extend; public class TestExtends { public static void main (String[] args) { student st= new student(); } } class person { public person() { System.out.println("這是一我的"); } } class student extends person{ public student() { System.out.println("這是一個學生"); } // public person() { // // } }
當你寫出以下代碼是出現這樣好像子類能繼承父類的構造方法,是這樣嗎?繼承
如今咱們把我註釋掉的代碼打開接口
報錯了! 若是子類繼承了父類,那爲何不能重寫方法呢?class
實際上實例代碼中子類並無繼承父類的構造方法,在最開始好像繼承了,是由於子類在寫構造方法的時候默認在構造方法的最前列有一行super() 所以在實例化構造的時候回調用父類的構造,並非繼承了父類的構造擴展
固然能,在父類實現接口的時候,實現接口的方法其實就已是一個父類的普通方法了,既然不特殊有有什麼資格不被子類鎖繼承呢,答案是確定的。List
關於接口和子類還有一個比較有趣的現象,子類和父類同時實現了同一個接口方法
這中狀況並非沒有的,好比ArrayList實現了List這個接口,ArrayList的抽象父類AbstractList一樣實現了List接口。這種狀況子類並不須要特地的去重寫接口中的抽象方法,由於父類已經幫忙作了這個操做,就想上面說了,接口中的抽象方法被重寫後就至關因而一個普通的方法,因此這個方法其實已經被子類繼承,就算咱們不特地重寫,它也是被重寫過的(雖然是和父類同樣)im