C# 学习之旅(二)简单的继承多态介绍
来源:互联网 发布:自制mac安装盘 编辑:程序博客网 时间:2024/06/08 05:10
继承
C#中,每个类只能继承一个类
virtual和override关键字
C#中,类的函数中有关键字virtual,那么它是可以被继承它的类加关键字 override 重写的,当然也可以不被重写,同样是可以使用的,但你是不能override一个没有关键字virtual的函数的。
如果一个类的函数没有加关键字virtual,那么在继承的类中也是可以改写的,只需要在函数中添加关键字new告诉程序隐藏起父类的同名函数即可,如果不加也是可以编译通过,只是会有一个warning提示。
override是告诉程序我要改写父类的方法,而new则是告诉程序隐藏起父类的方法,它们的实现是不一样的
sealed关键字:表示该类无法被继承
class Program { static void Main(string[] args) { Dog dog = new Dog(); dog.Bite(); dog.Age = 10; Console.WriteLine(dog.getAge()); dog.BiteMan(); } } class Animal { public int Age; public virtual void Bite() { Console.WriteLine("animal bite"); } public virtual int getAge() { return Age; } public void BiteMan() { Console.WriteLine("Animal bite man"); } } sealed class Dog :Animal { public override void Bite() { Console.WriteLine("dog bite"); } public new void BiteMan() { Console.WriteLine(" bite man"); } } //无法继承 class Cat : Dog { }
补充的:
关于override和new关键字还有一点,如果我是用父类类型来声明一个子类的话,那么override的函数是子类的函数,而new关键字的函数是父类的函数
继承关系的实例化顺序:首先调用父类的构造函数,然后是子类的构造函数
重载:
class Program { static void Main(string[] args) { PrintHello(); Complex c1 = new Complex(); Complex c2 = new Complex(); c1.number = 2; c2.number = 3; Console.WriteLine((c1 + c2).number); } //可以传参不同重载,但不能传参一样但返回值不同 public static void PrintHello() { Console.WriteLine("hello world"); } public static void PrintHello(string toWho) { Console.WriteLine("hello {0}", toWho); } } //运算符重载 class Complex { public int number; public static Complex operator +(Complex c1,Complex c2) { Complex c = new Complex(); c.number = c1.number + c2.number; return c; } }
多态:一个形态,多个功能
静态多态:编译时候就已经知道,主要通过程序重载来实现
动态多态:只有程序具体运行时候才知道是什么功能,通过override重写达到目的
class Program { static void Main(string[] args) { Human human1 = new Man(); Human human2 = new Woman(); human1.CleanRoom(); human2.CleanRoom(); } } class Human { public virtual void CleanRoom() { Console.WriteLine("Human Clean Room"); } } class Man:Human { public override void CleanRoom() { Console.WriteLine("Man clean room slowly"); } } class Woman:Human { public override void CleanRoom() { Console.WriteLine("Woman clean room quickly"); } }}
0 0
- C# 学习之旅(二)简单的继承多态介绍
- c#学习 10/22 字符串的各种方法与继承的简单介绍
- C#学习之二---创建简单的图形应用程序-WPF
- okhttp的简单介绍(二)之简单封装
- okhttp的简单介绍(二)之简单封装
- Java学习笔记之继承和接口(二) 继承和多态、接口
- C#学习之继承
- c#学习之--继承
- 《C#编程之道》 之 C#面向对象编程的继承性(二)
- android uiautomator学习(二)主要类的简单介绍
- android uiautomator学习(二)主要类的简单介绍
- android uiautomator学习(二)主要类的简单介绍 .
- C#的继承、多态简单小示例
- C#中简单的继承和多态
- 简单类的继承(二)
- 重新开始学习.NET之二–继承和实现多态的几种方法
- C# EF CodeFirst简单工厂模式,接口多继承实例(二)
- C#学习笔记之继承
- leetcode-404-Sum of Left Leaves
- android.support.v7.app.AlertDialog 使用报错
- 帮你理解学习lambda式
- http://www.cnblogs.com/GnagWang/archive/2011/03/31/2001067.html
- Windows和Linux下安装JDK
- C# 学习之旅(二)简单的继承多态介绍
- maomao
- 【JAVA开发】JadClipse安装和配置
- 2017.01.16 学习日记-享元模式
- C语言实现循环队列
- 第一个Qt应用的实现-QT4.8.5移植到S3C2440
- Android 回调接口是啥,回调机制详解
- 继承+关键字(static+const+instanceof+final+)+protected
- Chapter 5:关联式容器之 map 和 multimap