在这种情况下,如果我们不小心拼写错误,例如写成 public void rn() { ... },编译器不会报错,但实际运行时会调用父类的 run 方法,这不是我们想要的行为。
使用 @Override 注解的原因 当我们在类里创建一个函数 希望它当我们拼写错时被发现,不然当运行时我们构造的run因为拼写错误会使用父类的run
现在,我们在子类中使用 @Override 注解:
java
复制代码
class Person { public void run() { System.out.println("Person is running"); } } class Student extends Person { @Override public void run() { System.out.println("Student is running"); } } class Teacher extends Person { @Override public void run() { System.out.println("Teacher is running"); } }
- 编译时检查:如果在
Student或Teacher类中方法名拼写错误(例如public void rn()),编译器会报错,提醒你没有正确重写父类的方法。 - 可读性:其他开发者一看到
@Override注解,就知道这个方法是对父类方法的重写。
总结
@Override 注解在Java中起到了编译时检查、提高代码可读性和维护性的作用。强烈建议在重写父类方法时总是使用 @Override 注解,以确保代码的正确性和易读性
如果父类Person的run()方法没有实际意义,能否去掉方法的执行语句?
答案是不行,会导致编译错误,因为定义方法的时候,必须实现方法的语句。
当你不像初始化(我理解的)父类你可以偷懒写抽象
因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。
例如,Person类定义了抽象方法run(),那么,在实现子类Student的时候,就必须覆写run()方法:
public class Main {
public static void main(String[] args) {
Person p = new Student();
p.run();
}
}
abstract class Person {
public abstract void run();
}
class Student extends Person {
@Override
public void run() {
System.out.println("Student.run");
}
}
接口
interface
所谓interface,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。因为接口定义的所有方法默认都是public abstract的,所以这两个修饰符不需要写出来(写不写效果都一样)。
当一个具体的class去实现一个interface时,需要使用implements关键字。

2243

被折叠的 条评论
为什么被折叠?



