继承是OOP最重要的特性之一。任何类都可以从另一个类继承,这就是说,这个类拥有它继承的类的所有成员。在OOP中,被继承(也称为派生)的类称为父类(也称为基类)。注意,C#中的对象仅能直接派生于一个基类,当然基类也可以有自己的基类。
继承性可从一个较一般的基类扩展或创建更多的特定类。例如,考虑一个代表农场家畜的类(由80多岁的 资深开发人员MacDonald在他的家畜应用程序中使用)。这个类名为Animal,拥有EatFood()或Breed()等方法,我们可以创建一个派生类Cow; Cow支持所有这些方法,也有自己的方法,如Moo()和SupplyMilk()。还可以创建另一个派生类Chicken,该类有Quck()和LayEgg()方法。
在UML中,用箭头表示继承,如图所示。
Animal | |||
+EatFood() +Breed() | |||
I | i | ||
Chicken | Cow | ||
+Cluck() +LayEgg() | +Moo() +SupplyMilk() |
在继承一个基类时,成员的可访问性就成了一个重要问题。派生类不能访问基类的私有成员,但可以访问其公共成员。不过,派生类和外部的代码都可以访问公共成员。这就是说,只使用这两个级别的可访问性,不能让一个成员可由基类和派生类访问,而不能由外部的代码访问。
为解决这个问题,C#提供了第三种可访问性:protected,只有派生类才能访问protected成员。对于外部代码来说,这个可访问性与私有成员一样:外部代码不能访问private成员和protected成员。
除了定义成员的保护级别外,我们还可以为成员定义其继承行为。基类的成员可以是虚拟的,也就是说,成员可以由继承它的类重写。派生类可以提供成员的另一种实现代码。这种实现代码不会删除原来的代码,仍可以在类中访问原来的代码,但外部代码不能访问它们。如果没有提供其他实现方式,通过派生类使用成员的外部代码就自动访问基类中成员的实现代码。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>