例子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. 大话设计模式--状态模式 State -- C++实现实例

    1.状态模式: 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就像是改变了其类. 状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂, 把状态的判断逻辑转移到表示不同状态的一系列类 ...

  3. C++ typedef的一个用法

    1.不适用typedef: #include <iostream> #include <cstring> using namespace std; struct Books { ...

  4. 一张图理解is_nll isset empty

    isset 判断变量是否已存在,如果变量存在则返回 TRUE,否则返回 FALSE. empty 判断变量是否为空,如果变量是非空 或非零 的值,则 empty() 返回 FALSE.换句话说,&qu ...

  5. 十 Django框架,Cookie

    注意:获取Cookie是在请求对象里处理,设置Cookie是在响应对象里处理 普通Cookieset_cookie()设置普通cookie 参数: key, 键 value='', 值 max_age ...

  6. Hibernate学习---第十节:Hibernate之QBC、样例查询&离线查询

    一.QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成 1.java 代码如下: /** * 查询所有 */ @Tes ...

  7. JS中的prototype、__proto__与constructor属性

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  8. Servlet简单增删改查

    前台页面是别人给的. 例子: package cn.itcast.cus.dao; import java.sql.SQLException; import java.util.ArrayList; ...

  9. BeanUtils介绍及使用

    JavaBeans事实上有三层含义.首先,JavaBeans是一种规范,一种在Java(包括JSP)中可重复使用的Java组件的技术规范,也可以说成我们常说的接口.其次,JavaBeans是一个Jav ...

  10. 【leetcode刷题笔记】Remove Duplicates from Sorted Array II

    Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...