簡體   English   中英

抽象類具體方法調用

[英]Abstract class concrete method invokation

我有一個叫做Animal的抽象類。 它有一個稱為sleeping()的具體方法。 然后,我通過extended Animals類編寫了另一個名為WildAnimal的類。 覆蓋了抽象動物類的sleeping()

我想將抽象類的具體方法調用到我的主要方法中(WildAnimal類的未重寫方法)。 我知道不能實例化Abstract類,但是可以調用Abstract類的具體method()嗎? 如果是,如何?

檢查以下代碼:

動物類(抽象):

 abstract class Animal {

   public void sleeping(){              
    System.out.println("Animal Sleeping...!");
   }
 }

WildAnimal類:

 class WildAnimal extends Animal{

    public void sleeping(){
       System.out.println("WildAnimal Sleeping...!");
    }
  }

AbsMethodTest(測試類):

 public class AbsMethodTest {

   public static void main(String[] args) {
    Animal ani = new WildAnimal();  // This will print "WildAnimal Sleeping...!"                    
    ani.sleeping();  // But i want to print "Animal Sleeping...!" is it possible ?
   }
 }

不,這是不可能的,除非您具有不覆蓋sleeping()Animal實現。 就客戶端代碼而言,不應“知道”誰提供了sleeping方法的行為。 從它的角度來看,它只是稱呼WildAnimal專業化的sleeping行為。 它不能“希望”要調用的超類實現,因為它根本不應該“知道”其調用的行為是特定於子類或從超類繼承的。

您必須做:

class WildAnimal extends Animal{

public void sleeping(){
    // System.out.println("WildAnimal Sleeping...");
    super.sleeping();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM