Java基礎系列三之多型

2021-08-18 22:29:25 字數 2976 閱讀 3421

引言:什麼叫作多型呢?

用通俗的話來說就是在同一時刻事物所呈現的不同狀態

例如   水:

多型 固態     液態     氣態

打個比方 父親person有行為這個方法,裡面包括幾個動作:吃飯,睡覺,走路 父親有三個兒子,三個兒子都繼承了父親的行為方法,所以三個兒子都有吃飯,睡覺,走路這些動作,但是三個兒子又分別有自己的方法---大兒子a會彈吉他,二兒子b會唱歌,三兒子c會打鼓 ...

1.person person = new a();是父類引用指向子類物件而不是父類物件指向子類引用。

2.如果僅是這麼去寫程式則父類引用不能去呼叫子類a特有的彈結他方法--person.guitar(); x

3此時還不是多型,記住實現多型的三要素:繼承 重寫 父類引用指向子類物件

4.要想使用父類引用去呼叫子類的特有方法guitar(),則需要在父類中同樣寫乙個guitar()方法,子類的guitar()是對父類guitar()方法的重寫,此時就可以使用person.guitar()。

注意:此時

在**的編譯階段

,person呼叫的仍然是

自己的guitar()

,不是子類的

,而當程式執行時

,person呼叫的卻是子類的guitar()

。這個動態的過程(編譯和執行是不同的狀態)才是多型 。

多型的前提:

1)必須有繼承關係

這是多型的入口,必經之地

2)必須有方法重寫

要使用父類的引用去呼叫子類中的方法,則這個被呼叫的方法必須在父類和子類中都存在,而且子類 中的這個方法必須對父類中的這個方法進行重寫。

3)必須有父類的引用指向子類物件(向上轉型)

父類名  fu = new  子類名() ;

父類引用的建立是通過子類在堆記憶體中新建了(new)乙個物件,也就是說父類的引用是通過子類新建物件進行的。

過載是一種靜態的多型。在程式編譯時能夠確定的方法呼叫,稱為早繫結,而在多態變數和重寫相結合之後在執行時才能確定,是動態的多型性,稱為晚繫結。

多型中成員訪問特點:

1)成員變數: 編譯看左,執行看左

2)非靜態

成員方法

:編譯看左,執行看右(存在方法重寫)

3)構造方法:無論是父類還是子類,都是對物件進行初始化

4)靜態成員方法:    編譯看左,執行看左(靜態跟類有關,算不上方法重寫) 

**示例

package org.westos;

class fu

public fu()

public static void function()

}//子類

class zi extends fu

public static void function()

public void method()

}public class extendsdemo2

}

多型的好處1)可以提高**的復用性:由繼承保證

2)可以提高**的擴充套件性:由多型保證...  

**示例

package org.westos;

class animal

public void sleep()

}// 貓類

class cat extends animal

public void sleep()

}// 狗類

class dog extends animal

public void sleep()

}// pig類

class pig extends animal

public void sleep()

}// 可以定義乙個動物的工具類animaltool

class animaltool

// 靜態功能

// 呼叫貓的功能

/* * public static void usecat(cat c) //呼叫豬的功能 public static void usepig(pig p)

* * //呼叫狗的功能 public static void usedog(dog d)

*/public static void useanimal(animal a)

}public class extendsdemo2

}

萬物有利則必有弊,此乃真理也!!!下面來說說多型的弊端

多型的弊端

不能通過父類的引用去呼叫子類中特有的功能

**例項

package org.westos;

class father2

}class son2 extends father2

//子類的特有關功能

public void method()

}public class extendsdemo2

}

可不可以將子類的引用指向父類的引用呢? (向下轉型)

格式:    子類名  s=(子類名) f;

將父類的引用強制轉換為子類的引用

**示例

package org.westos;

class father3

}class son3 extends father3

// 子類的特有關功能

public void method()

}public class extendsdemo2

}

向下轉型使用不當,會出現乙個異常:屬於執行時期異常:classcastexception

**如下

**示例

JAVA基礎之多型

多型。物件導向的第三個特徵 多型。多型 指某種事物的多種存在形態。物件的多型性 比如,貓這個事物,也可叫做物件。他肯定具備貓的基本特徵,同時也具有動物的基本特徵。這就是貓的多型性,物件的多型性。簡單的意思就是 乙個物件對應著不同的型別。那麼多型在 中的體現形式就是 父類 動物 或者介面的引用指向其子...

JAVA基礎之多型

一 定義 允許不同類的物件對同乙個訊息做出不同的響應 比如你是乙個酒神,對酒情有獨鍾。某日回家發現桌上有幾個杯子裡面都裝了白酒,從外面看我們是不可能知道這是些什麼酒,只有喝了之後才能夠猜出來是何種酒。你一喝,這是劍南春 再喝這是五糧液 再喝這是酒鬼酒 在這裡我們可以描述成如下 酒 a 劍南春 酒 b...

Java基礎之多型

1.多型的條件 1.繼承 2.方法的重寫 3.父類引用指向子類物件 2.多型中成員和成員方法的訪問特點 1.成員 編譯看左邊 父類 執行看左邊 父類 2.成員方法 編譯看左邊 父類 執行看右邊 子類 public class demo09 polymorphic class father class...