1. 程式人生 > >Java學習筆記之繼承(1)

Java學習筆記之繼承(1)

提到繼承,大家可能第一時間會想到繼承遺產,Java裡的繼承雖然不是繼承錢,但是也和繼承遺產有相似之處。
繼承遺產一般是說子女輩獲得了父輩留下的錢財、物品等,java裡的繼承是指子類獲得了和父類一樣的屬性。

1、類的繼承格式

  • class 父類 {} \quad \quad\quad \quad \quad \quad
    // 定義父類
  • class 子類 extends 父類{} \quad // 使用extends關鍵字繼承父類
class Person{
    private String name;
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Student extends Person { // 子類繼承父類 private String school; // 宣告新的屬性 public void setSchool(String school){ this.school =
school; } public String getSchool(){ return school; } } public class FirstJavaDemo { public static void main(String[] args) { Student stu = new Student(); // 例項化子類物件 stu.setName("張三"); stu.setAge(18); stu.setSchool("NKU"); System.out.println("姓名:" + stu.getName() + " 年齡:" + " 學校:" + stu.getSchool()); } }

在這裡插入圖片描述

2、繼承的限制

子類和父類的關係,可以對映到孩子與父親的關係,正常來說,一個孩子只可能有一個親生父親,但是父親可以有多個孩子,也就是說子類只能繼承一個父類,但是父類卻可以被多個子類繼承

class A {
	// 各種程式碼
}
class B extends A{
	// 各種程式碼
}

class C extends A{
	// 各種程式碼
}

另外雖然不允許多重繼承,但是允許多層繼承,也就是說孩子可以繼承父親,父親繼承爺爺

class A {  // 爺爺
	// 各種程式碼
}
class B extends A{  // 父親繼承爺爺
	// 各種程式碼
}

class C extends B{	// 兒子繼承父親
	// 各種程式碼
}

3、訪問限制

使用繼承的時候,子類不能直接訪問父類的私有成員,但是可以呼叫父類的非私有方法。
在這裡插入圖片描述

class Person{
    private String name;
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class Student extends Person {
    public void fun(){
		System.out.println("父類的姓名:" + name) // 錯誤,不能直接訪問私有屬性
		System.out.println("父類的年齡:" + age)  // 錯誤,原因同上
	}
}

子類不能直接訪問父類的私有成員,但是可以通過getter方法間接來訪問,

class Person{
    private String name;
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class Student extends Person {
    public void fun(){
		System.out.println("父類的姓名:" + getName())  // 正確,間接訪問
		System.out.println("父類的年齡:" + getAge())   // 正確,間接訪問
	}
}