方法覆写
(重定向自方法覆盖)
在面向对象的编程中,方法覆写是一种语言功能,它允许子类或子类提供已由其超类或父类之一提供的方法的特定实现。 它允许特定类型的多态性(子类型)。 子类中的实现通过提供与父类中的方法具有相同名称、相同参数或签名以及相同返回类型的方法来覆盖(替换)超类中的实现。[1]执行的方法的版本将由用于调用它的对象确定。 如果使用父类的对象调用方法,则执行父类中的版本,如果使用子类的对象调用方法,则执行子类中的版本。 [2] 某些语言允许程序员防止方法被覆盖。
名称编辑
部分编程语言的英文术语会区分 “overwrite” 和 “override” 两个词。在 C++ 的术语中,override 指的是以具有相同名称及参数列的函数覆盖其父类中的虚拟函数,overwrite 则是指以名称相同但参数列不同的函数覆盖其父类中的虚拟函数或以名称相同且参数列相同的函数覆盖其父类中的非虚拟函数。[3][4]然而这两个词都经常被翻译为中文的“覆写”[5],故而导致混淆。
特定语言示例编辑
Ada编辑
Ada 默认提供方法覆盖。为了有利于早期错误检测(例如拼写错误),可以指定何时期望方法实际覆盖或不覆盖。这将由编译器检查。
type T is new Controlled with ......; procedure Op(Obj: in out T; Data: in Integer); type NT is new T with null record; overriding -- overriding indicator procedure Op(Obj: in out NT; Data: in Integer); overriding -- overriding indicator procedure Op(Obj: in out NT; Data: in String); -- ^ compiler issues an error: subprogram "Op" is not overriding
C#编辑
C# 确实支持方法覆盖,但仅在使用修饰符override
和virtual
或abstract
明确要求时。
abstract class Animal{ public string Name { get; set; } // Methods public void Drink(); public virtual void Eat(); public void Go();}class Cat : Animal{ public new string Name { get; set; } // Methods public void Drink(); // Warning: hides inherited drink(). Use new public override void Eat(); // Overrides inherited eat(). public new void Go(); // Hides inherited go().}
注释编辑
- ^ Flanagan 2002, p. 107
- ^ Lewis & Loftus 2006, p.454
- ^ C++中的Overload、Override和Overwrite – 煎炸熊の記事本. note.artchiu.org. [2023-12-30]. (原始内容存档于2023-12-30).
- ^ Override Overload Overwrite. wuciawe.github.io. [2023-12-30]. (原始内容存档于2023-12-30).
- ^ Lee, Wayne. Override(覆寫) & Overload(多載) &Polymorphism(多型)的差異. Medium. 2020-07-26 [2023-12-30]. (原始内容存档于2023-12-30) (英语).
参考文献编辑
- Lewis, J. & Loftus, W. (2008). Java: Software Solutions (6th ed.). Boston, MA: Pearson Addison Wesley.
- Flanagan, David.(2002).Java in a Nutshell.Retrieved from http://oreilly.com/catalog/9780596002831/preview#preview
🔥 Top keywords: Baike: 首页Special:搜索毛泽东家族榮耀之繼承者天之驕女鐵拳英雄九龍城寨之圍城黃循財背着善宰跑篠崎泫妮妃雅新生 (网络剧)劉偉健斯洛伐克习近平劉俊謙 (香港)李显龙歌手2024佛誕淚之女王2024年泰國羽球公開賽新加坡總理邊佑錫新加坡Energy (組合)庆余年九龍寨城六四事件家族榮耀金智媛彌助菲律宾胖猫跳江事件劉寶傑DAY6林峯張文傑李光耀神耆小子張鳳妮黃世聰Seventeen (組合)维基百科願榮光歸香港中華民國鬼滅之刃 柱訓練篇2024年英雄联盟季中邀请赛中华人民共和国TripleS金秀賢 (男演員)罗伯特·菲佐井柏然2024年世界女排联赛黃偉哲怪獸8號佘詩曼Foodpanda金惠奫新加坡总统香緹·摩爾于北辰 (1968年)王嘉爾笑看風雲排球少年!!角色列表林飛帆郭葦昀馴鹿寶貝翁靜晶猩球崛起:王國誕生ILLIT尼古拉·約基奇春色寄情人周殷廷鬼滅之刃排球少年!!吳釗燮逆天奇案2不夠善良的我們BABYMONSTER李正皓尚达曼BOYNEXTDOOR胡子彤IVE (組合)陳靜 (香港)香港吴作栋黃道十二宮凡希亚·奥伊亚胡宇威長洲太平清醮張員瑛搜查班長1958伍允龍习明泽黄岩岛賴清德偶然遇見的你虽然不是英雄