例子1--C#继承的常见问题:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Animal animal = new Animal();
animal.Introduce();
Console.WriteLine(animal.word); //父类指向子类 是可以的
Animal cat = new Cat();
cat.Introduce();
Console.WriteLine(cat.word); //子类指向父类才是不能的 所以下面代码将会报错 不能说 “父亲像儿子”
//Cat cat2 = new Animal();
//cat2.Introduce();
//Console.WriteLine(cat2.word); //Dog类中没有重写父类的虚方法 所以调用的是父类的Introduce方法
Animal dog = new Dog();
dog.Introduce();
Console.WriteLine(dog.word); //子类和父类存在的同名方法 但是子类的方法没用Override重写 此时调用的是子类的方法
Bird bird = new Bird();
bird.Introduce();
Console.WriteLine(bird.word); //子类和父类存在的同名方法 如果new出来的是父类指向子类 而且子类没有重写父类的虚方法 则调用的是父类的同名方法
Animal bird2 = new Bird();
bird2.Introduce();
Console.WriteLine(bird2.word); }
}
public class Animal
{
public string word;
public virtual void Introduce()
{
word = "动物";
}
} public class Cat : Animal
{
public override void Introduce()
{
//重写后继续使用父类的Inroduce方法
//base.Introduce();
//子类自己的
word = "猫";
}
} public class Pig : Animal
{
public override void Introduce()
{
word = "猪";
}
} public class Dog : Animal
{ } public class Bird : Animal
{
//这里没有重写父类的Introduce方法 而是Bird类自己的
public void Introduce()
{
word = "鸟";
}
}
}

结果:

例子2--子类父类字段与方法的优先级:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//优先级
Father son = new Son();
//如果是父类指向子类 “儿子像父亲”所以优先调用父类的同名变量type 故输出“初代”
Console.WriteLine(son.type);
//强制转换为Son 此时输出的是“第二代”
Console.WriteLine(((Son)son).type);
//当调用的是方法时 输出的是子类重写的方法
Console.WriteLine(son.SayHi());
//子类和父类存在的同名方法 如果new出来的是父类指向子类 而且子类没有Override重写父类的虚方法 则调用的是父类的同名方法
//上例子1中的 Animal bird2
}
}
public class Father
{
public string type = "初代"; public virtual string SayHi()
{
return "大家好!我是初代.";
}
} public class Son:Father
{
public string type = "第二代"; public override string SayHi()
{
return "大家好!我是第二代.";
}
}
}

结果:

结论:

子类指向子类

——则优先调用子类自生的所有成员

父类指向子类

——则优先使用父类的所有成员字段(若要调用则强制转换)

——子类重写父类的成员方法则优先调用子类的

——若子类没有重写父类的成员方法而保持同名 则优先调用父类的同名方法

C# -- 继承规则的更多相关文章

  1. css样式继承规则详解

    css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...

  2. java泛型类的继承规则

    首先看一看java泛型类的使用: /** * 一个泛型方法:使程序更加安全 * 并且能被更多的使用 * @author 丁** * * @param <T> */ class Pair&l ...

  3. 理解Python中的继承规则和继承顺序

    先来看一段代码: class First(object): def __init__(self): print ("first") class Second(object): de ...

  4. Swift难点-继承中的构造规则实例具体解释

    关于继承中的构造规则是一个难点. 假设有问题,请留言问我. 我的Swift新手教程专栏 http://blog.csdn.net/column/details/swfitexperience.html ...

  5. C#继承简介与规则

    一.C#继承简介 1. 类的层次结构 下面是一个类的层次结构图: 上图反映了鱼类的派生关系,其中最高层的实体往往具有最一般最普遍的特征,越下层的实体就越具体,并且下层包含了上层的特征.如果将上层的实体 ...

  6. python作用域和多继承

    python作用域 python无块级作用域 看c语言代码: #include<stdio.h> int main() { > ) { ; } printf("i = %d ...

  7. 学习Sass 的基本语法规则[Sass和compass学习笔记]

    自从发现可编程的css语法 Sass和基于Sass的css库compass 一个给我的感觉像c# 另外一个给我的感觉像.NET Framework,一切都为了提升开发效率和降低开发大型web的门槛. ...

  8. python学习第十六天 --继承进阶篇

    这一章节主要讲解面向对象高级编程->继承进阶篇,包括类多继承介绍和继承经典类和新式类属性的查找顺序不同之处. 多继承 上一章节我们讲到继承,子类继承父类,可以拥有父类的属性和方法,也可以进行扩展 ...

  9. Sass 的基本语法规则

    转自:http://www.cnblogs.com/qqloving/p/3676852.html 自从发现可编程的css语法 Sass和基于Sass的css库compass 一个给我的感觉像c# 另 ...

随机推荐

  1. Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found 问题排查

    自定义的classLoader启动spring容器,遇到 Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not subtype ...

  2. Java -- 封装访问控制级别,包, instanceof 运算符, 初始化块

    1. 可以用 package name1.name2; 显式的定义包名, *.class文件位置应该对应包 name1 name2 的目录下. 2. instanceof 运算符 Object obj ...

  3. css3 点击爆炸下落

    代码][JavaScript]代码    $(document).ready(function() {             // Generate the clips. In this case ...

  4. 文件复制的另一种选择,使用FileChannel复制文件

    通常来说,FileChannel比普通的缓冲输入输出流有更高的效率     import java.io.File; import java.io.FileInputStream; import ja ...

  5. 维度表, 事实表, 数据仓库, BI...

    以前一直对维度表, 事实表, 数据分析, BI等概念等有一些模糊. 这几天的学习终于让这些有了一些眉目了: 维度表示你要对数据进行分析时所用的一个量, 比如你要分析产品销售情况, 你可以选择按类别来进 ...

  6. 十一 Django框架,Session

    Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 1.数据库(默认)2.缓存3.文件4.缓存+数据库5.加密cookie 1.数据库Session,保存在数据库 ...

  7. 08 - Django应用第五步

    1 自动测试 自动测试与测试的不同在于, 自动测试的测试工作是交给系统完成的 测试也有分类和级别, 有的用于一些细微的细节, 有的是针对整个软件整体 测试会保证一些看起来正常运行的功能在实际的多种情况 ...

  8. linux命令学习笔记(10):cat 命令

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示, 或者从标准输入读取内容并显示,它常与重定向符号配合使用. .命令格式: cat [选项] [文件] ...

  9. Java进阶07 嵌套类

    到现在为止,我们都是在Java文件中直接定义类.这样的类出现在包(package)的级别上.Java允许类的嵌套定义. 这里将讲解如何在一个类中嵌套定义另一个类. 嵌套 内部类 Java允许我们在类的 ...

  10. Linux使用tcpdump抓取网络数据包示例

    tcpdump是Linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...