方法覆盖的清晰度

时间:2012-03-15 11:40:43

标签: java override

对重写方法和重写方法的正确定义感到好奇。 在我的理解中,重写方法是子类中的方法,它覆盖基类中具有相同签名和返回类型的方法。

但是我看到source将重写的方法称为子类中覆盖基类中方法的方法。

那么被覆盖的方法是哪个,这是最重要的方法?

对不起,如果这是一个有点愚蠢的问题

3 个答案:

答案 0 :(得分: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部分,以便更深入地理解。

答案 1 :(得分:3)

我们假设我们有一个class SubClass extends SuperClass,然后是:

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

除此之外,wikipedia告诉我们:

  

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

答案 2 :(得分: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();
    }
}

我使用此示例的原因是,从您的实际情况看情景。 Animal可能具有某些一般功能。但是Cat会有一些与通用Animal不同的功能,但某些功能比通用Animal功能有所改进。因此,Cat似乎覆盖(将包含重写方法)Animal功能。

另一个简单的例子,如果你对汽车感兴趣。比如,有一个Car。它将采用acceleration方法。但Ferrari显然会比acceleration更好Car。但是,FerrariCar。因此,Ferrari会覆盖Car中的方法。 SO,覆盖方法在子类中,overriden方法在基类中。

那么,你现在明白了吗?覆盖方法存在于子类中。但是覆盖的方法存在于基类中。