假设我有一个名为的方法 mymethod()
并且此方法会覆盖超类方法的方法.
覆盖方法意味着什么?
这是否意味着mymethod()忽略mymethod()超类方法中的所有内容,或者这意味着还包括超类方法中的所有内容?
覆盖方法时,我是否只能覆盖相同名称的方法,或者我可以覆盖任何名称的方法?
谢谢.
一个例子:
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 base和I'm also a child.
| 归档时间: |
|
| 查看次数: |
13456 次 |
| 最近记录: |