2017-09-24 96 views
-3

我有兩個類父類和子類中,父類方法是從子類對象調用

class SuperClass{ public void count(){} } 
class SubClass extends SuperClass { } 
class Test 
{ 
    public static void main(String[] args) 
    { 
     new SubClass().count(); 
    } 
} 

在這裏,我用加多寶看到這個代碼是如何工作的,讓子類的對象後,我預計的計數方法該子類被稱爲繼承SuperClass的count方法,但SuperClass的count方法被調用。

我在jdb中使用「list」進行了檢查,它顯示了SuperClass的count方法中的行,爲什麼會發生這種情況?

+3

因爲'SubClass'中沒有'count'方法來調用。用oops術語,你沒有重寫'SubClass'中的'count'方法。 – kaza

+2

您沒有重寫任何內容... –

+3

這不是Java。或者如果是的話;它不會編譯。 –

回答

2

當您調用對象的方法時,Java會檢查該對象中是否存在該方法。如果是這樣,它會調用它,否則會檢查父類中的存在。等到找到方法爲止。 由於您沒有重寫您的方法,因此調用的方法是父方法。

-1

它應該是下面的東西。

 class SuperClass{ public void count(){ 
    //if it is not overriden in the child class then this will get executed 
    } 
} 
     class SubClass extends SuperClass { 
     public void count(){ 
     //If this exists, this will be executed otherwise the parent count() will be executed 
     } 
     } 
     class Test 
     { 
      public static void main(String[] args) 
      { 
       new SubClass().count(); 
      } 
     } 
+0

*爲什麼*應該是這樣的東西? – Makoto

+0

@Makoto我正在讀他的陳述「我期望SubClass的count方法被稱爲繼承SuperClass的count方法,但SuperClass的count方法被調用。」但他沒有提供實施。每個方法的評論部分還有他的信息。 –