教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線:400-618-4000

Java怎樣正確重寫(xiě)父類(lèi)?

更新時(shí)間:2021年08月11日16時(shí)00分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

在繼承關(guān)系中,子類(lèi)會(huì)自動(dòng)繼承父類(lèi)中公共的方法,但有時(shí)在子類(lèi)中需要對(duì)繼承的方法進(jìn)行一些修改,即對(duì)父類(lèi)的方法進(jìn)行重寫(xiě)。需要注意的是,子類(lèi)中重寫(xiě)的方法需要和父類(lèi)被重寫(xiě)的方法具有相同的方法名、參數(shù)列表以及返回值類(lèi)型。

在上一節(jié)案例中,Dog類(lèi)從Animal類(lèi)繼承了shout()方法,該方法在被調(diào)用時(shí)會(huì)打印“動(dòng)物發(fā)出叫聲”,這顯然不能描述一種動(dòng)物的具體叫聲,Dog類(lèi)對(duì)象屬于犬類(lèi),發(fā)出的叫聲應(yīng)該是“汪汪”。為了解決這個(gè)問(wèn)題,可以在Dog類(lèi)中重寫(xiě)父類(lèi)Animal中的shout()方法,如文件1所示。

文件1 Example02.java

     // 定義Animal類(lèi)
     class Animal {        
          //定義動(dòng)物叫的方法        
         void shout() {              
             System.out.println("動(dòng)物發(fā)出叫聲");
         }
     }
     // 定義Dog類(lèi)繼承動(dòng)物類(lèi)
     class Dog extends Animal {    
         // 定義狗叫的方法
         void shout() {             
             System.out.println("汪汪……");
         }
     }
     // 定義測(cè)試類(lèi)
     public class Example02 {    
         public static void main(String[] args) {
             Dog dog = new Dog(); // 創(chuàng)建Dog類(lèi)的實(shí)例對(duì)象
             dog.shout();           // 調(diào)用Dog類(lèi)重寫(xiě)的shout()方法
         }
     }
運(yùn)行結(jié)果如圖1所示。

1628653137887_重寫(xiě)父類(lèi).jpg

文件1中,定義了Dog類(lèi)并且繼承自Animal類(lèi)。在子類(lèi)Dog中定義了一個(gè)shout()方法對(duì)父類(lèi)的方法進(jìn)行重寫(xiě)。從運(yùn)行結(jié)果可以看出,在調(diào)用Dog類(lèi)對(duì)象的shout()方法時(shí),只會(huì)調(diào)用子類(lèi)重寫(xiě)的方法,并不會(huì)調(diào)用父類(lèi)的shout()方法。

注意:

子類(lèi)重寫(xiě)父類(lèi)方法時(shí),不能使用比父類(lèi)中被重寫(xiě)的方法更嚴(yán)格的訪問(wèn)權(quán)限。如:父類(lèi)中的方法訪問(wèn)權(quán)限是public,子類(lèi)重寫(xiě)父類(lèi)該方法的訪問(wèn)權(quán)限就不能是private。



猜你喜歡:

JDBC連接oracle數(shù)據(jù)庫(kù)步驟【實(shí)戰(zhàn)教程】

怎樣解決與GC相關(guān)的問(wèn)題?

怎樣實(shí)現(xiàn)redis緩存與數(shù)據(jù)庫(kù)同步?

傳智教育java開(kāi)發(fā)培訓(xùn)課程



0 分享到:
和我們?cè)诰€交談!