继承

    继承是OOP最重要的特性之中的一个。不论什么类都能够从还有一个类中继承,这就是说,这个类拥有它继承的类的全部成员。

在OOP中,被继承的类称为父类。

在C#中的对象仅能直接派生于一个基类。

    对象的继承代表了一种“is-a”的关系。假设两个对象A和B。能够描写叙述为“B是A”,则表明B能够继承A。

“猫是哺乳动物”。就说明了猫与哺乳动物之间继承与被继承的关系。实际上,继承者还能够理解为是被继承者的特殊化,由于它除了具备被继承者的特殊性外,还具备自己独有的个性。比如,猫就可能拥有抓老鼠、爬树等“哺乳动物”对象所不具备的属性。

    假设子类继承与父类,第一、子类拥有父类非private的属性和功能;第二、子类具有自己的属性和功能,即子类能够扩展父类没有的属性和功能;第三、子类还能够以自己的方式实现父类的功能(方法重写)。

比如:考虑一个农场家禽家畜的类。这个类叫做Animal,拥有EatFood()和Breed()方法,我们能够创建一个子类Cow。支持全部这些方法。它也有自己的方法。如Moo()和SupplyMilk()。还能够创建还有一个子类Chicken,该类有Cluck()和LayEgg()

class Program
{
static void Main(string[] args)
{
Cow cow = new Cow("牛牛");
cow.EatFood();
cow.Breed();
cow.Moo();
cow.SupplyMilk(); Console.WriteLine(); Chicken chicken = new Chicken("咕咕");
chicken.EatFood();
chicken.Breed();
chicken.Cluck();
chicken.LayEgg();
}
}
//动物类
class Animal
{
protected string name = "";
public Animal(string name)
{
this.name = name;
}
public void EatFood() //吃东西
{
Console.WriteLine(this.name + "会吃东西");
}
public void Breed() //生殖后代
{
Console.WriteLine( this.name + "能生殖后代");
}
}
class Cow:Animal
{
public Cow(string name): base(name)
{ }
public void Moo() //牛叫
{
Console.WriteLine( "我的名字叫" + name + " 哞");
}
public void SupplyMilk() //提供牛奶
{
Console.WriteLine( "我的名字叫" + name + " 我能提供牛奶");
}
}
class Chicken : Animal
{
public Chicken(string name):base(name)
{ }
public void Cluck() //鸡叫
{
Console.WriteLine("我的名字叫" + name + " 咯咯咯");
}
public void LayEgg() //下蛋
{
Console.WriteLine("我的名字叫" + name + " 我能下蛋");
}
}

继承的长处:继承使得全部子类公共的部分都放在了父类,使得代码得到了共享。这就避免了反复,另外,继承可使得改动或扩展继承而来的实现都较为easy。

继承的缺点:假设父类改变,那么子类就不得不变。

继承会破坏包装,父类实现细节暴露给子类。增大了两个类之间的耦合性。







C# 之 继承的更多相关文章

  1. javaScript的原型继承与多态性

    1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...

  2. JavaScript的继承实现方式

    1.使用call或apply方法,将父对象的构造函数绑定在子对象上 function A(){ this.name = 'json'; } function B(){ A.call(this); } ...

  3. javascript中的继承与深度拷贝

    前言 本篇适合前端新人,下面开始...... 对于前端新手来说(比如博主),每当对js的对象做操作时,都是一种痛苦,原因就是在于对象的赋值是引用的传递,并非值的传递,虽然看上去后者赋值给了前者,他们就 ...

  4. 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  5. JS继承类相关试题

    题目一: //有关于原型继承的代码如下:function Person(name) {   this.name = name;}Person.prototype = {     getName : f ...

  6. JS继承之寄生类继承

    原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象.节省了创建自定义类型这一步(虽然觉得这样没什么意义). 模型 function object(o){ function W(){ } W. ...

  7. JS继承之借用构造函数继承和组合继承

    根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...

  8. JS继承之原型继承

     许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在ECMAScript中无法实现接口继承.ECMAScript只支 ...

  9. 深入浅出JavaScript之原型链&继承

    Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instanc ...

  10. 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型

    前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.

随机推荐

  1. ubuntu 14.04 桌面版关闭图形界面

    ubuntu 14.04 桌面版关闭图形界面 问题: 怎样将ubuntu14.04设置为文本模式启动? 解决方式: 改动改GRUB 的配置文件(不建议直接改 grub.conf) $sudo vim ...

  2. Delphi的时间 x87 fpu control word 精度设置的不够

    在win7 64位系统下, 一个DELPHI写的DLL注入一个C语言程序后. 出现非常奇怪的浮点数相加出错的情况. (注: 在XP系统下是正常的).比如: 40725.0001597563 + 0.7 ...

  3. [luoguP4302] [SCOI2003] 字符串折叠 解题报告(区间DP)

    题目链接:https://www.luogu.org/problemnew/show/P4302 题解: 我们考虑折叠一个区间里的字符串,怎么样才是最优的 1.把这个区间分成几部分分别折叠 2.把这个 ...

  4. 【Henu ACM Round#16 E】Paths and Trees

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 感觉很像一道最短路. 然后就试了一发. 结果真的是.. 只要用一个优先队列优化的dijkstra算法求出每个点的最短路上的前一个点是 ...

  5. 洛谷——P1970 花匠

    https://www.luogu.org/problem/show?pid=1970 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走, ...

  6. MethodFilterInterceptor(方法拦截器)配置excludeMethors

    由于该类有setExcludeMethods方法,因此在xml中可以配置一个excludeMethods参数 刚开始老是拦截不成功,tomcat显示这个参数没找到,后来终于找到错误:不应该在拦截器栈中 ...

  7. [Recompose] Refactor React Render Props to Streaming Props with RxJS and Recompose

    This lesson takes the concept of render props and migrates it over to streaming props by keeping the ...

  8. HDU 4462 Scaring the Birds (暴力枚举DFS)

    题目链接:pid=4462">传送门 题意:一个n*n的区域,有m个位置是能够放稻草人的.其余都是玉米.对于每一个位置(x,y)所放稻草人都有个作用范围ri, 即abs(x-i)+ab ...

  9. 对照 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 假设也能添加个prepareForSegue回调就好了

    对照 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 假设也能添加个prepareForSegue回调就好了 太阳火神的漂亮人生 (http:// ...

  10. pandas 下的 one hot encoder 及 pd.get_dummies() 与 sklearn.preprocessing 下的 OneHotEncoder 的区别

    sklearn.preprocessing 下除了提供 OneHotEncoder 还提供 LabelEncoder(简单地将 categorical labels 转换为不同的数字): 1. 简单区 ...