@override超类的方法意味着什么?

use*_*431 2 java

假设我有一个名为的方法 mymethod()

并且此方法会覆盖超类方法的方法.

覆盖方法意味着什么?

这是否意味着mymethod()忽略mymethod()超类方法中的所有内容,或者这意味着还包括超类方法中的所有内容?

覆盖方法时,我是否只能覆盖相同名称的方法,或者我可以覆盖任何名称的方法?

谢谢.

wkl*_*wkl 5

一个例子:

public class Base {
    public void saySomething() {
        System.out.println("Hi, I'm a base class");
    }
}

public class Child extends Base {
    @Override
    public void saySomething() {
        System.out.println("Hi, I'm a child class");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在假设我们在main某个地方有一个功能......

public static void main(String [] args) {
    Base obj = new Child();
    obj.saySomething();
}
Run Code Online (Sandbox Code Playgroud)

当它运行时,它将调用Child的版本saySomething,因为你通过提供新版本的函数来覆盖父版本Child.

@Override注释允许其他开发人员(和你,当你忘记了)要知道,此方法将覆盖东西在一个基类/接口,它也允许编译你叫喊,如果你没有真正覆盖在基类东西.例如,如果您获得了函数的参数数量错误,编译器会给您一个错误,指出您@Override的错误.

例如:

public class Child extends Base {
    @Override
    public void saySomething(int x) {
        System.out.println("I'm a child and x is: " + x);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器会对你大喊大叫,因为这个版本saySomething接受了一个参数,但是父版本没有参数,所以你正在@Override做一些不在父版本中的东西.


在超级

Child版本saySomething将不会调用该Base版本中,你必须用自己做super.method().

例如:

public class Child extends Base {
    @Override
    public void saySomething() {
        super.saySomething();
        System.out.println("I'm also a child");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你跑了main,并用这个Child类,它会打印出I'm a baseI'm also a child.