1. 程式人生 > 其它 >Java:多型性

Java:多型性

Java是屬於面向物件程式設計的語言,面向物件的三大特徵,封裝,繼承,多型。其中,多型性是建立在繼承關係上的。

多型用一句話概括就是:父類引用指向子類物件

實現多型的幾種方式:

現在有兩個類,Animal類和Cat類,其中Cat繼承Animal。

1、直接用父型別變數接收子類物件

	Animal ac = new Cat();

2、引數多型

方法引數型別是父型別,但傳入子類物件,構成多型

	Cat c1 = new Cat();
	m1(c1);

	public static void m1(Animal a){}

3、返回值多型

用父型別變數接收返回的子類物件,形成多型。

	Animal a2 =
m2(); public static Animal m2(){ return new Cat();//返回貓型別 }

多型之屬性呼叫 :

我們先建立兩個類,Fu和Zi,其中Zi繼承Fu。

父類有兩個成員變數和一個成員方法。

public class Fu {
	int fu = 1;
	int a = 5;
	void m(){
		System.out.println("父類方法");
	}
}

子類中建立兩個變數和兩個方法
注意:a 變數和 m()方法父類也有

public class Zi extends Fu{
	int zi = 9;
	int a =
7; void m(){ System.out.println("子類方法"); } void unique(){ System.out.println("子類特有"); } }

用父型別變數接收子類物件,進行測試:

public class Test {
	public static void main(String[] args) {
		Fu fu = new Zi();
		System.out.println(fu.a);
		fu.m();
		//fu.unique();
	}
}

結果:
在這裡插入圖片描述
發現,m()是子類和父類都有的,子類重寫了父類的方法。父類引用呼叫了子類的這個方法,因為unique()方法是子類特有方法,父類沒有,不能呼叫。a 變數呼叫的也是父類中的。

給出總結:

  • 1 如果呼叫的是父類沒有的,直接報錯,都訪問不了
  • 2 如果呼叫的是子類沒有的,都訪問父類的
  • 3 如果呼叫的是父類和子類都有的,除了成員方法呼叫子類,其他的都呼叫父類,因為成員方法可以覆寫