Lua中如何在子类B的foo()里按条件调用父类A的同名方法?
如何在子类中部分重写父类方法(无需访问父类代码)
这问题太常见了,好在几乎所有主流的面向对象编程语言都提供了专门的语法,让你不用接触父类代码就能实现这种“条件式重写”的需求——核心就是在需要复用父类逻辑的分支里,直接调用父类的同名方法。
给你举几个常用语言的具体实现例子:
Java 实现示例
class B extends A { @Override public void foo() { if (/* 这里写你的特定条件,比如 someFlag == true */) { // 执行你的自定义逻辑 System.out.println("触发B的自定义foo逻辑"); } else { // 直接调用父类A的原有foo方法 super.foo(); } } }
Python 实现示例
class B(A): def foo(self): if 特定条件: # 比如 self.status == "special" # 自定义逻辑部分 print("执行B的自定义foo逻辑") else: # 调用父类的原方法 super().foo()
C# 实现示例
public class B : A { public override void Foo() { if (/* 你的条件判断 */) { // 自定义逻辑 Console.WriteLine("执行B的自定义Foo逻辑"); } else { // 调用父类的原方法 base.Foo(); } } }
关键说明
- 这些
super(Java/Python)、base(C#)都是语言内置的关键字,专门用来在子类中访问父类的成员(包括方法)。 - 不管父类代码是编译好的库还是你看不到的源码,只要你的子类合法继承了父类,就能通过这些关键字直接调用父类的原有方法,完全不需要复制父类的实现逻辑。
- 这种写法也符合面向对象的“开闭原则”——不用修改父类代码,只扩展子类的功能。
内容的提问来源于stack exchange,提问作者Bing Gan
相关产品推荐
相关产品推荐

