抽象类和抽象方法

时间:2019-01-08 16:36:02

标签: unity3d inheritance abstract-class abstract

嘿,我看了很多,也看了很多关于继承的视频。 只有抽象类的概念,这意味着它无法实现。

我知道您不能在游戏对象上使用抽象类,但是使用抽象类的作用是什么? 同样,抽象方法只能在抽象类中实现,为什么不能在抽象类中实现方法而只能覆盖它呢?

我还阅读了一些有关使用component<T>的抽象方法的信息,但我还没有发现它的目的是希望你们中的一些聪明人能帮助一个困惑的程序员:D

2 个答案:

答案 0 :(得分:2)

抽象类用于为共享的“主类”建模,该主类将永远不会自己使用,但派生类将使用该数据/函数。

例如说您的继承人是

     Animal

Bird Mammal Reptile

在游戏中,您将永远只使用鸟类/哺乳动物/爬行动物,因为它们是动物的具体模型,但是它们都将共享至少一些相同数量的代码。 Health,Hunger,并可能提供一些抽象功能,例如Move(),这些功能将在每个子类级别上实现。

从工程的角度来看,这使您可以做一些有趣的事情,例如创建“动物”类型的数组/向量,其中可以包含鸟类,哺乳动物和爬行动物。

所以说我们有一个Animal类型的向量,每个子类都有1个。

然后我们可以做

foreach (Animal a in animals)
   a.Move(100)

鸟类/哺乳动物/爬行动物的移动方式有所不同,但是由于我们具有抽象功能,而在基础层上没有实现,因此我们的代码可以保证在继承树中的某个点上实现它。

其他受欢迎的示例是Item的抽象类和抽象函数item.Use();。物品可以是药水,卷轴,苹果(食品类)。没关系,因为它们都共享相同的基本级别接口。

答案 1 :(得分:0)

我认为阅读Microsoft's article on Abstract Classes and Methods会非常有帮助。您可以通过为类提供基本功能并从其继承来利用抽象类。

您还会将implementoverride的措辞混淆:您通过覆盖它来实现抽象方法。

Component<T>表示将类型参数作为您定义的类Component。这在C#中定义为Generics。您可以将它们与基本的Unity3D类(例如Component<GameObject>GetComponent<GameObject>)一起使用。