继承

    继承是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增加分区

    http://www.th7.cn/system/lin/201506/106338.shtml http://www.linuxidc.com/Linux/2012-06/61983.htm 因为本 ...

  2. ConfigurationSection

    https://msdn.microsoft.com/en-us/library/system.configuration.configurationsection(v=vs.110).aspx Re ...

  3. Car Talk2

    #! /usr/bin/python # -*- coding: utf-8 -*- # # # “Recently I had a visit with my mom and we realized ...

  4. POJ 3013 Dijkstra

    从1节点最短路,,然后再乘一下权值就OK了 //By SiriusRen #include <queue> #include <cstdio> #include <cst ...

  5. No mapping found for HTTP request with URI [/test2/test/add.json] in DispatcherServlet with name 'dispatcher'

    查看spring-mvc.xml中扫描包路径配置是否正确: <!-- 扫描controller(controller层注入) --> <context:component-scan ...

  6. 【DNN 系列】 MVC 分页

    MVC分页可采用插件形式, 有MvcPage那个插件但是我觉得那个是假分页 有点影响效率 所以网上找了一个例子来 做分页 1, PagerQuery.cs public class PagerQuer ...

  7. java 通过httpclient调用https 的webapi

    java如何通过httpclient 调用采用https方式的webapi?如何验证证书.示例:https://devdata.osisoft.com/p...需要通过httpclient调用该接口, ...

  8. YYDispatchQueuePool阅读笔记

    阅读了开源大神的YYDispatchQueuePool,在此记下一些从中学到的东西. 首先YYDispatchQueuePool.m文件中有如下类型对应: static inline dispatch ...

  9. Mac配置PHP环境

    本文章来自:http://blog.csdn.net/wj_november/article/details/51417491 本人使用的是:MacOs 10.12.3,根据如上操作已经安装成功,感谢 ...

  10. Windows7 安装ubuntu双系统

    家里的老笔记本是MBR分区,不支持EFI , 一开始是用U盘安装的,还对着ubuntu官网的教程,下载了官方推荐的那个u盘引导工具,安装依然会报错, 网上查询也有很多种说法,也有说是bug的,无论如何 ...