前言:找了八百本书三千篇博客都没讲清楚继承到底是什么,怕结构混乱我也不常用继承,以至于时不时搜一下继承是什么,实在是烦了,所以专门记录一下。


比起纠结抽象层面上这些东西到底什么意思,更重要的是如何使用。

实验1:

首先我创建了两个脚本,Test9.cs和Test10.cs。

unity 脚本物体未激活 变量可以被修改吗_抽象方法

unity 脚本物体未激活 变量可以被修改吗_虚方法_02

如上图,我们可以看到Test10可以直接继承Test9, 而Test9继承于MonoBehaviour。一路追查下去,能看到最终继承于Object脚本。

unity 脚本物体未激活 变量可以被修改吗_子类_03

但是我们可以不管这些事,我们只要知道在Unity中创建的脚本可以不做特殊处理就能被其它脚本继承。


 实验2:

unity 脚本物体未激活 变量可以被修改吗_开发语言_04

在Test9.cs中,我们定义了一个方法Normal。

 而在Test10.cs中,再次定义Normal出错。

unity 脚本物体未激活 变量可以被修改吗_c#_05

 除了像修改建议那样修改外,我们还可以这样定义↓

将Test9.cs中的Normal方法修改为

unity 脚本物体未激活 变量可以被修改吗_虚方法_06

而Test10.cs的Normal方法修改为

unity 脚本物体未激活 变量可以被修改吗_虚方法_07

这就叫重写方法。

 另外注意提示:

1.

unity 脚本物体未激活 变量可以被修改吗_c#_08

 2.重写的方法参数一定要和原方法一致。

3.子类可以不继承父类的方法。

如果想要在继承的同时复用原方法的代码:

unity 脚本物体未激活 变量可以被修改吗_子类_09


感叹一句:写代码烦就烦在明明道理是一样的,可是写法稍微出错就全部崩盘,那把重点放在抽象概念上还有什么用呢。

进阶知识任何一本书上都有,就不细说了。我平时也用不到,等用到了研究一下再码字。 

刚刚去看了一下抽象(abstract)方法和虚(virtual)方法的区别,虚方法和普通方法没啥太大区别,抽象方法不能直接用,只能在子类中重写一遍再用。你说非要搞一个虚方法和抽象方法出来干嘛我也不知道明明不搞也不是不行这大概就是历史的屎堆吧

在C# 中的多态性 | 菜鸟教程找到了抽象方法和虚方法概念上的区别↓

虚方法和抽象方法的区别是:因为抽象类无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现。

意思就是抽象类没法被直接调用

我说你们干嘛要神神叨叨的,这种感觉就像吃饭不叫吃饭,叫“用膳”,新人程序员问用膳是什么,各种“大佬”说用膳就是用膳,别人提一句不就是吃饭吗,还要被骂“没文化”

反正国内的教材都这种风格