子類只能繼承父類所有非私有的成員(成員方法和成員變數)
子類不能繼承父類的構造方法,但是可以通過super關鍵字去訪問父類構造方法
class Father { //私有屬性 private int num = 10; public int num2 = 20; //私有方法 private void method() { System.out.println(num); System.out.println(num2); } public void show() { System.out.println(num); System.out.println(num2); } } class Son extends Father { public void function() { //err //num 在 Father 中是 private 訪問控制 //子類不能繼承父類私有成員變數 //System.out.println(num); System.out.println(num2); } } public class ExtendsDemo { public static void main(String[] args) { Son s = new Son(); //子類不能繼承父類的私有方法 //s.method(); s.show(); s.function(); } }
呼叫子類構造方法時預設訪問父類中無參構造方法(子類初始化之前,一定要先完成父類資料的初始化)
如果在父類中有公有的get/set方法,可以訪問到父類中的私有屬性:通過顯式呼叫父類帶參構造方法
//抽象動物類 abstract class Animal { //姓名 private String name; //年齡 private int age; public Animal() {} public Animal(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //定義一個抽象的方法 public abstract void eat(); } //定義具體的狗類 class Dog extends Animal { public Dog() {} public Dog(String name,int age) { //試圖這樣對name和age初始化會報錯 //name 在 Animal 中是 private 訪問控制 //this.name = name; //this.age = age; //通過訪問父類帶參構造來初始化 super(name,age); } public void eat() { System.out.println("Dog"); } } //測試類省略