天天看點

黑馬程式員--多态1.多态

------Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------

1.多态

定義:某一類事物的多種存在形态

例:動物中貓,狗

貓這個對象對應的類型是貓類型

         貓 x=new 貓();

同時貓也是動物中的一種,也可以把貓稱為動物

動物 y=new 貓();

動物是貓和狗具體事物中抽取出來的符類型

1.1多态的表現形式

         父類的引用指向了自己的子類對象

         父類的引用也可以接受自己的子類對象

1.2多态的前提

         必須是類與類之間有關系.要麼繼承,要麼實作

         通常還有一個前提:存在覆寫

1.3多态的好處

         多态的出現大大的提高了程式的擴充性

1.4多态的弊端;

         提高了擴充性,但是隻能使用父類的應用通路類中的成員

多态的應用:

abstract class Student
{
	public abstract void study();//定義一個抽象的學生類,因為不同的班學習内容是不同的,使用抽象方法
	public void sleep(){
		System.out.println("sleep");
	}
}
class BaseStudent extends Student
{
	public void study(){//子類實作父類的抽象方法
		System.out.println("base study");
	}
	public void sleep(){
		System.out.println("base sleep");
	}
}

class AdvStudent extends Student
{
	public void study(){
		System.out.println("adv study");
	}
	public void sleep(){
		System.out.println("adv sleep");
	}
}
class DuoTai
{
	public static void main(String[] args){
		
		Student b=new BaseStudent();
		doIt(b);
	}
	private static void doIt(Student s){
		s.study();
		s.sleep();
	}	
}
           

1.5多态的出現代碼中的特點(多态使用的注意事項)

在多态中成員函數的特點:

在編譯時期:參閱引用型變量所屬的類中是否有調用的方法.如果沒有編譯失敗

在運作時期:參閱對象屬性的類中是否有調用的方法

簡單總結就是:成員函數在多态調用時,編譯看左邊,運作看右邊

面試:開發用不到

1.成員變量

class Fu 
{
	int num=5;
}
class Zi extends Fu
{
	int num=7;
}
class DuoTai01
{
	public static void main(String[] args){
		Fu f=new Zi();
		System.out.println(f.num);
		Zi z=new Zi();
		System.out.println(z.num);
	}
}<strong>
</strong>
           
執行結果:
           
5
           
7
           

在多态中成員變量的特點:

無論編譯和運作,都參考左邊(引用型變量所屬的類)

2.靜态方法:

class Fu 
{
	int num=5;
	static void method1(){
		System.out.println("Fu method");
	}
}
class Zi extends Fu
{
	int num=7;
	static void method1(){
		System.out.println("Zi method");
	}
}
class DuoTai01
{
	public static void main(String[] args){
		Fu f=new Zi();
		f.method1();
		Zi z=new Zi();
		z.method1();
	}
}
           
執行結果:
           
Fu method
           
Zi method
           

在多态中,靜态成員函數的特點:

無論編譯和運作,都參考左邊

接口型引用指向自己的子類對象

接口的出現提高了功能擴充性

接口型引用指向子類對象提高了程式的擴充性

接口降低了耦合性,提高了功能擴充性,提供了規則

------ Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------