java中子類是否可以訪問父類的私有屬性
首先子類是無法繼承父類的私有屬性,也無法直接訪問父類的私有屬性。
但如果父類中有對私有屬性的get和set的方法,而且是public的修飾的方法,
子類在繼承父類的同時,也繼承了帶有public修飾的set和get方法,所以可以通過以下方式子類可以訪問到父類的私有屬性。
package test; class Person{ private String name; public Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } class Student extends Person{ } public class Test { public static void main(String[] args) { Student s = new Student(); s.age = 12; s.setName("小明"); String name = s.getName(); System.out.println("name = "+ name); } }
輸出結果截圖:
通過呼叫子類中從父類那裡繼承的set和get方法來訪問父類中私有屬性name。
但是要記住,子類並非繼承到父類的私有屬性name,子類只是繼承了父類的非私有屬性,比如以上例子的 age 屬性。
雖然子類可以通過以上的方法可以訪問父類的私有屬性,但是在做java題時,一般說子類可以訪問父類的私有屬性這些說法都是錯誤的。
要注意一點,如果父類中沒有對私有屬性的 get 和 set 方法或者其他對私有屬性操作的方法,又或者這些方法都被private修飾,
這樣子類是無法訪問到父類的私有屬性的。