C# -- 继承规则
例子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# -- 继承规则的更多相关文章
- css样式继承规则详解
css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...
- java泛型类的继承规则
首先看一看java泛型类的使用: /** * 一个泛型方法:使程序更加安全 * 并且能被更多的使用 * @author 丁** * * @param <T> */ class Pair&l ...
- 理解Python中的继承规则和继承顺序
先来看一段代码: class First(object): def __init__(self): print ("first") class Second(object): de ...
- Swift难点-继承中的构造规则实例具体解释
关于继承中的构造规则是一个难点. 假设有问题,请留言问我. 我的Swift新手教程专栏 http://blog.csdn.net/column/details/swfitexperience.html ...
- C#继承简介与规则
一.C#继承简介 1. 类的层次结构 下面是一个类的层次结构图: 上图反映了鱼类的派生关系,其中最高层的实体往往具有最一般最普遍的特征,越下层的实体就越具体,并且下层包含了上层的特征.如果将上层的实体 ...
- python作用域和多继承
python作用域 python无块级作用域 看c语言代码: #include<stdio.h> int main() { > ) { ; } printf("i = %d ...
- 学习Sass 的基本语法规则[Sass和compass学习笔记]
自从发现可编程的css语法 Sass和基于Sass的css库compass 一个给我的感觉像c# 另外一个给我的感觉像.NET Framework,一切都为了提升开发效率和降低开发大型web的门槛. ...
- python学习第十六天 --继承进阶篇
这一章节主要讲解面向对象高级编程->继承进阶篇,包括类多继承介绍和继承经典类和新式类属性的查找顺序不同之处. 多继承 上一章节我们讲到继承,子类继承父类,可以拥有父类的属性和方法,也可以进行扩展 ...
- Sass 的基本语法规则
转自:http://www.cnblogs.com/qqloving/p/3676852.html 自从发现可编程的css语法 Sass和基于Sass的css库compass 一个给我的感觉像c# 另 ...
随机推荐
- c#学习内容
学习winform+DevExpress 界面制作 wpf UIAutomation 控制别的程序 ok c#通过句柄控制别的程序 ok c# 截图 ok c# 多线程 ok c# 数据库myq ...
- 剑指offer之 O(1)时间删除链表结点
问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. package Problem13; /* * 问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1 ...
- Storm 执行异常 java.lang.RuntimeException: java.nio.channels.UnresolvedAddressException 问题解决
最近写的 binlog2kafka storm job 上线在一个新的集群环境中(storm 0.9.0.1, kafka 0.8), storm job 运行时报出如下异常: java.lang.R ...
- zookeeper+dubbo问题
1.java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [ ...
- Python习题-统计日志中访问次数超过限制的IP
#1.1分钟之内ip访问次数超过200次的,就给他的ip加入黑名单#需求分析: #1.读日志,1分钟读一次 #2.获取这1分钟之内所有访问的ip #3.判断ip出现的次数,如果出现200次,那么就加入 ...
- OpenCV——旋转模糊 (二)
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- resin启动时报错com.caucho.config.LineConfigException的解决
resin启动时报以下错误: [13:32:10.120] {main} WEB-INF/web.xml:42: 'listener-class' is an unknown property of ...
- rtmp与hls流媒体服务器搭建:ubuntu下Nginx搭建初探与rtmp-module的添加
关键词:Nignx(http服务器):rtmp,hls(流媒体服务) 前言:感谢开源,感谢战斗民族.现在在做流媒体服务的一些工作,流媒体服务器搭建的网上教程多入牛毛,但是细细查看,发现很多同志贴上来的 ...
- Qt Quick之TableView的使用
本博只是简单的展示TableView的基本使用(TableView.style:TableViewStyle.headerDelegate.rowDelegate.itemDelegate.Table ...
- Operating System-Kickoff:什么是操作系统&&操作系统的核心概念
接下来会写一系列Operating System(操作系统)的文章,今天先开个头.本文主要内容: 什么是操作系统 操作系统的核心概念 程序=数据结构+算法 一.什么是操作系统 1.1 操作系统是对硬件 ...