1. 程式人生 > >Java多型之編譯看左,執行看左/右

Java多型之編譯看左,執行看左/右

Java中多型的前提:         A:有繼承關係         B:有方法重寫(不是必須)         C:有父類引用指向子類物件

多型中成員的訪問特點:         A:成員變數:編譯看左邊,執行看左邊。         B:成員方法:編譯看左邊,執行看右邊。

多型的好處:提高了程式的擴充套件性         具體體現:定義方法的時候,使用父型別作為引數,將來在使用的時候,使用具體的子型別參與操作。多型的弊端:不能使用子類的特有功能

向上轉型:          從子到父          父類引用指向子類物件向下轉型:          從父到子          父類引用轉為子類物件

程式碼(父類/子類/實現類):

package com.test;

public class Person {
	// private String name;
	public String name = "PersonName";// 測試,暫且改為public
	// private int age;
	public int age = 20; // 測試,暫且改為public

	public void eat() {
		System.out.println("父類方法:人都要吃飯");
	}

	public void sleep() {
		System.out.println("父類方法:人都要睡覺");
	}

	//get/set方法等。。。
}
package com.test;

public class Student extends Person {
	// private String name;
	public String name = "StudentName";// 測試,暫且改為public
	// private int age;
	public int age = 18; // 測試,暫且改為public

	public int studentNum = 001;

	@Override // 子類重寫父類eat方法
	public void eat() {
		System.out.println("子類重寫方法:學生要吃飯");
	}

	@Override // 子類重寫父類sleep方法
	public void sleep() {
		System.out.println("子類重寫方法:學生都要睡覺");
	}

	public void study() {
		System.out.println("子類獨有方法:學生要學習");
	}

	// get/set方法等。。。

}
package com.test;

public class TestDemo {
	public static void main(String[] args) {
		// 多型中成員的訪問特點:
		// A:成員變數:編譯看左邊,執行看左邊。
		// B:成員方法:編譯看左邊,執行看右邊。

		// 多型,向上轉型:
		Person p = new Student();
		// 編譯看左邊:
		// p.studentNum //訪問子類獨有成員變數報錯,編譯不通過
		// p.study(); //訪問子類獨有成員方法報錯,編譯不通過

		// 成員變數:執行看左邊
		System.out.println(p.name); // PersonName
		System.out.println(p.age);// 20

		// 成員方法:執行看右邊
		p.eat();// 子類重寫方法:學生要吃飯
		p.sleep();// 子類重寫方法:學生都要睡覺

	}
}

相關參考:

歡迎大家交流指正,討論完善!