在面向对象编程中,超类(父类)的方法可以被重写(override),这是面向对象三大特性之一“多态”的重要体现。
下面分语言说明,并给出注意点。
方法重写指的是:
子类重新定义父类中已经存在的方法,方法名、参数列表、返回类型相同(或协变),但实现不同。
重写后,调用该方法时,实际执行的是子类的方法。
class Parent {
void say() {
System.out.println("Parent");
}
}
class Child extends Parent {
@Override
void say() {
System.out.println("Child");
}
}
调用:
Parent p = new Child();
p.say(); // 输出 Child
✅ 可以重写
❗ 注意:
finalclass Parent:
def say(self):
print("Parent")
class Child(Parent):
def say(self):
print("Child")
✅ 可以重写
Python 是动态语言,没有强制限制,只要方法名相同即可。
class Parent {
public:
virtual void say() {
cout << "Parent";
}
};
class Child : public Parent {
public:
void say() override {
cout << "Child";
}
};
✅ 可以重写
virtualclass Parent {
public virtual void Say() {
Console.WriteLine("Parent");
}
}
class Child : Parent {
public override void Say() {
Console.WriteLine("Child");
}
}
✅ 可以重写
virtual / abstractoverride| 情况 | 是否可重写 |
|---|---|
final / sealed 方法 |
❌ |
static 方法 |
❌(只能隐藏) |
| 私有方法 | ❌ |
| 构造方法 | ❌ |
| 对比 | 重写 | 重载 |
|---|---|---|
| 发生位置 | 子类与父类 | 同一类中 |
| 方法名 | 相同 | 相同 |
| 参数列表 | 相同 | 不同 |
| 返回类型 | 相同或协变 | 可不同 |
| 目的 | 运行时多态 | 编译时多态 |
✅ 超类的方法可以被重写,只要它不是 final / static / private,并且子类满足重写规则。
这是实现多态和扩展行为的关键机制。
如果你有具体语言或代码示例,我可以帮你逐行分析。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。