2012-03-15 71 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告诉我们:

(替换)在子类中重写实现通过提供超类中的实现一个与父类中的方法具有相同名称,相同参数或签名以及相同返回类型的方法。