java:多态的实现机制
在java中,多態(tài)主要由以下兩種表現(xiàn)方式:
? 1. 方法的重載(overload)
? ? ?同一個(gè)方法中有多個(gè)同名的方法,但這些方法有不同的參數(shù)。因此在編譯時(shí),就可以確定到底調(diào)用哪個(gè)方法。它是一種編譯時(shí)多態(tài)。重載可以被看做一個(gè)類(lèi)中的方法多態(tài)性。
? 2. 方法的覆蓋(override)
? ? ?子類(lèi)可以覆蓋父類(lèi)的方法,因此同樣的方法會(huì)在父類(lèi)和子類(lèi)中有著不同的表現(xiàn)形式。 ? 在java語(yǔ)言中,基類(lèi)的引用變量不僅可以指向基類(lèi)的實(shí)例對(duì)象,也可以指向其子類(lèi)的實(shí)例對(duì)象。同時(shí),接口的引用變量也可以指向其實(shí)現(xiàn)類(lèi)的實(shí)例對(duì)象。這樣就可以實(shí)現(xiàn)動(dòng)態(tài)綁定。 這樣就只有運(yùn)行時(shí)才能確定調(diào)用哪個(gè)方法,因此通過(guò)方法覆蓋實(shí)現(xiàn)的多態(tài)也可以被稱(chēng)為運(yùn)行時(shí)多態(tài)。
? ? ?子類(lèi)覆蓋(override)父類(lèi)中的方法時(shí),需要注意幾點(diǎn):?
?
?類(lèi)中的方法有多態(tài)的概念,類(lèi)中的成員變量沒(méi)有多態(tài)的概念。
? ? 如下代碼, 打印的結(jié)果是1, 成員變量的取值是父類(lèi)還是子類(lèi)并不取決于創(chuàng)建對(duì)象的類(lèi)型,而是取決于所定義變量的類(lèi)型,這是在編譯期間決定的。?
import org.junit.Test;public class Base {public int i = 1;@Testpublic void test(){Base b = new Derived();System.out.println(b.i);// b所屬的類(lèi)型是Base, b.i指的是Base類(lèi)中定義的i} }class Derived extends Base{public int i = 2; }?
總結(jié)
以上是生活随笔為你收集整理的java:多态的实现机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: javac,使用-d .与省略-d的区别
- 下一篇: springmvc九:spring mv