2012-03-15 74 views
0

對覆蓋方法和覆蓋方法的正確定義感到好奇。 在我的理解中,重寫方法是子類中的方法,它覆蓋基類中相同簽名和返回類型的方法。清除方法覆蓋

但是我已經看到源代碼將重寫的方法稱爲覆蓋基類中方法的子類中的方法。

那麼哪個是重寫的方法,哪個是重載的方法?

很抱歉,如果這是一個有點傻問題

+0

不要忘記接受一個正確答案! :-) – 2012-03-16 13:27:23

回答

2

Java Documentation直接例如:

public class Animal { 
    public static void testClassMethod() { 
     System.out.println("The class" + " method in Animal."); 
    } 
    public void testInstanceMethod() { 
     System.out.println("The instance " + " method in Animal."); 
    } 
} 



public class Cat extends Animal { 
    public static void testClassMethod() { 
     System.out.println("The class method" + " in Cat."); 
    } 
    public void testInstanceMethod() { 
     System.out.println("The instance method" + " in Cat."); 
    } 

    public static void main(String[] args) { 
     Cat myCat = new Cat(); 
     Animal myAnimal = myCat; 
     Animal.testClassMethod(); 
     myAnimal.testInstanceMethod(); 
    } 
} 

我用這個例子,看看從你的真實世界的情況的方案的原因。 A Animal可能具有某些一般特徵。但Cat將具有一些不同於通用Animal的功能,但某些功能比通用Animal功能有所改進。因此,Cat似乎覆蓋(將包含重寫方法)Animal功能。

另一個簡單的例子,如果你對汽車感興趣。說,有一個Car。它會有一個acceleration方法。但Ferrari明顯比Car有更好的acceleration。但是,FerrariCar。因此,Ferrari覆蓋了Car中的方法。所以,重寫方法在子類中,並且重寫方法在基類中。

那麼,你現在明白了嗎?覆蓋方法存在於子類中。但是被覆蓋的方法存在於基類中。

+0

是的,我得到了它的感謝。我是這樣理解的。 – Arianule 2012-03-15 20:37:00

3
class A { 
    public void method() { 
     System.out.println("I don't know if I am overriden, but I'm not overriding anything"); 
    } 
} 
class B extends A { 
    public void method() { 
     System.out.println("I am overriding A.method() which has now been overriden"); 
    } 
} 

您還可以閱讀,描述覆蓋,實施,躲起來了,過載等進行更深入的瞭解了JLS的部分。

3

假設我們有一個class SubClass extends SuperClass,則:

SuperClass#method <- overridden 
     ^
      | 
     overrides 
      | 
    SubClass#method <- overriding 

除此之外,wikipedia告訴我們:

(替換)在子類中重寫實現通過提供超類中的實現一個與父類中的方法具有相同名稱,相同參數或簽名以及相同返回類型的方法。