1. 程式人生 > >【java】【多型】的一個小例子

【java】【多型】的一個小例子

  首先要了解什麼是多型?

:在面嚮物件語言中,介面的多種不同的實現方式即為多型。具體來說,就是不同子類作為引數使用同一父類的方法
時的實現方法是不同的。

  多型的表現形式有哪些?

1.過載overload,是發生在同一類裡的。

標識一個函式除了函式名外,還有函式的引數(個數和型別),也就是說,一個類中可以有兩個或更多的函式,叫同一個名字而他們的引數不同。簡單來說

就是對重名函式進行重寫,往往根據引數的不同來區分。

2、覆蓋override,是發生在父類和子類之間的。這種關係要求必須有extends(繼承)。

  實現多型的技術是什麼?

動態繫結。是指在執行期間判斷引用物件的型別,根據其實際的型別呼叫其相應的方法。

 多型存在的必要條件是什麼?

1.要有繼承

2.要有重寫override

3.父類引用指向子類物件(常用instanceof來判斷)

 使用多型有哪些好處?

1.可替換性  2.可擴充性 3.介面性 4.靈活性  5.簡化性

下面給一個自己寫的多型override的小例子:

class A extends Main{
	public String show(A obj)
	{
		System.out.println("呼叫了A的show方法");
		return "A";
	}
}
class B extends Main{
	public String show(B obj)
	{
		System.out.println("呼叫了B的show方法");
	return "B";
	}
}
class C extends A{
	public String show(C obj)
	{
		System.out.println("呼叫了C的show方法");
		return "C";
	}
}
public class Main{
	public static void main(String[] args)
	{
		Main u = new Main();
		A a = new A();
		B b = new B();
		C c = new C();
		System.out.println(u.show(c));//改變c的值為a,b,看結果
	}
	public String show(Main main)
	{
		if(main instanceof A)
		{
			System.out.println("以A類為物件呼叫show方法");
		}
		if(main instanceof B)
		{
			System.out.println("以B類為物件呼叫show方法");
		}
		if(main instanceof C)
		{
			System.out.println("以C類為物件呼叫show方法");
		}
		return "main";
	}
	
}
其中A,B類是Main類的子類,C是A的子類,改變
(u.show(c))
的值。

特別的,如果Main引用指向C物件,那麼它同時也指向C物件的父類:A物件。

所以結果是這樣的:

以A類為物件呼叫show方法
以C類為物件呼叫show方法
main