多态
413字约1分钟
2024-08-10
重写(覆写)
在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override
)
提示
重写和重载区别:如果方法签名不同,就是重载,重载方法是一个新方法;如果方法签名相同,并且返回值也相同,就是重写
多态
多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法
// 假设有这么一个方法,我们无法直接判断输出结果。
public void runSay(Person p) {
p.say();
}
public class Person {
public void say() {
System.out.println("我是人类");
}
}
class Student extends Person {
// 加上 @Override 可以让编译器帮助检查是否进行了正确的覆写,不是必须的。
@Override
public void say() {
System.out.println("我是学生");
}
}
覆写Object方法
因为所有的 class
最终都继承自 Object
,而 Object
定义了几个重要的方法
toString()
:把instance
输出为String
equals()
:判断两个instance
是否逻辑相等hashCode()
:计算一个instance
的哈希值
在必要的情况下,我们可以覆写 Object
的这几个方法
调用super
public class Person {
public void say() {
System.out.println("我是人类");
}
}
class Student extends Person {
@Override
public void say() {
// 调用父类的方法
super.say();
System.out.println("我是学生");
}
}
final
继承可以允许子类覆写父类的方法。如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为 final
。用 final
修饰的方法不能被 Override