首先,繼承的定義:繼承是指一個對象直接使用另外一對象的屬性和方法測試
很明顯,父對象被private修飾過的屬性和方法,子對象沒法直接使用(能夠經過父類的get 、set方法間接使用)this
那麼根據繼承的定義來判斷:private修飾過的都沒法被繼承spa
得出結論以後,我本身寫了一些代碼進行測試。code
1. 使用繼承後,父對象會隨着子對象的建立而建立,根據內存加載的順序也能夠看出來。對象
2. 父對象會比子對象早一步先建立:緣由blog
2.1 子類的構造方法第一句老是要寫上父類的構造方法,用來建立父對象,由於繼承是發生在對象與對象之間的,因此必須先有一個父對象,子對象再去繼承父對象繼承
3. 隨着子對象的建立完畢,內存也同時存在父對象,這個父對象只能被子對象使用,子對象經過 super 關鍵字調用父對象的屬性和方法內存
4. 若是沒有重寫屬性和方法,那麼子對象裏面實際上並無一個真正屬於 "本身" 的屬性和方法,因此此時咱們不管用 this 或者 super ,調用的都是父對象的東西,也就是說關鍵詞寫不寫都無所謂,反正引用的都是同一個內存地址get
5. 發生重寫後,子對象從實際上擁有了屬於 "本身" 的屬性和方法,因此這時候咱們必須使用 this 和 super 關鍵字來區分到底使用誰的數據io
public class Test01 { public static void main(String[] args) throws CloneNotSupportedException { //建立子對象 B b = new B(); //調用子對象的t1方法 b.t1(); } } //父類 class A { private int test = 7; String name; int age; A(String name) { this.name = name; } } //子類 class B extends A { int test = 8; //重寫age後,子對象擁有屬於本身的age int age; B() { // 建立父類對象,父對象初始化 name = "小明" super("小明"); } void t1() { // 小明 System.out.println(super.name); // 小明 從這裏能夠看出繼承是先有父對象,子對象使用或繼承(複製)父對象的name, // 可是咱們還不能判斷子對象是複製仍是直接調用父對象的name。 System.out.println(this.name); this.name = "小紅"; // 小紅 這裏表示,this.name和super.name是同一個變量,也就是說繼承以後,父對象的屬性和對象能夠被子對象調用 System.out.println(super.name); super.age = 1; this.age = 2; // 1 父對象age並無被修改 System.out.println(super.age); // 2 這裏顯示的是子對象本身的age System.out.println(this.age); //super.test報錯(被private保護了) //System.out.println(super.test); //this.test可用 System.out.println(this.test); } }