JAVA中子類繼承了父類的私有屬性方法了嗎?
阿新 • • 發佈:2019-01-29
一、繼承知識點簡單梳理
1、繼承會獲得父類的屬性和方法,子類還能有自己的屬性方法。
開閉原則:對修改關閉,對擴充套件開啟。
2、JAVA支援單繼承(一個子類只能有一個直接父類)、支援多重繼承(A extends B,B extends C)。
JAVA不支援多繼承,原因:如果兩個父類有相同的方法,那麼子類繼承父類呼叫這個相同的方法的時候,會出現不 確定性,即二義性。多繼承在JAVA中通過介面來實現。
3、this()呼叫子類的構造方法,super()呼叫父類的構造方法。
4、重寫:方法名相同,引數列表相同,返回型別相同。且子類的修飾許可權要大於父類的修飾許可權。
過載:方法名相同,引數列表不同,與返回值型別無關。
二、
子類繼承父類,子類擁有父類所有的屬性和方法,但是父類的私有屬性和私有方法,子類是不能訪問的,當然一些父類的私有屬性可能可以通過相應的方法訪問到,但是私有的方法似乎不能簡單的訪問,這裡暫不考慮Java反射機制。在一個子類被建立的時候,首先會在記憶體中建立一個父類物件,然後在父類物件外部放上子類獨有的屬性,兩者合起來形成一個子類的物件。子類物件確實擁有父類物件中所有的屬性和方法,但是父類物件中的私有屬性和方法,子類是無法訪問到的,只是擁有,但不能使用。所以子類物件是絕對大於父類物件的,所謂的子類物件只能繼承父類非私有的屬性及方法的說法是錯誤的,可以繼承,只是無法訪問到而已。
不能繼承,子類只能在父類中寫一個public的get方法來獲取父類中的private屬性,子類就呼叫父類的get方法來獲取私有屬性。
// 封裝 javabean public class Person{ // 屬性私有化 private String name; // 無參構造方法 public Person(){ } // 公有的set get public Person(String name){ this.name = name; } public void setName(String name){ this.name = name; } public String getName(){ return name; } } //學生類 繼承 public class Student extends Person{ public Student(String name){ super(name); } } // 測試類 public class TestStudent{ public static void main(String[] args){ Student mStudent = new Student("張三"); String mName = mStudent.getName(); System.out.println("Name is : " + mName); mStudent.setName("李四"); mName = mStudent.getName(); System.out.println("Name is : " + mName); } }