标签:
摘要:提到面向对象就不得不说面向对象的三大特性,封装;继承;多态!下面还是通过图和例子的方式继续了解一下面向对象的三个核心!
下面还是通过具体的图进行分析:
通过代码来感受一下语法:
class Program { static void Main(string[] args) { Fu f1 = new Fu(); f1.GetFu(); //父类就只能获取到父类的属性方法,是不能获取到子类的方法的 zi z1 = new zi(); z1.GetZi(); //子类既可以获取到子类的方法属性,又可以获取到父类的属性和方法 z1.GetFu(); Console.ReadKey(); } } class Fu { public void GetFu() { Console.WriteLine("父类方法"); } } class zi:Fu //C#和C++不同,这里只能单继承 { public void GetZi() { Console.WriteLine("子类方法"); } }
通过图来看看继承的关系:
三.多态(一个对象可以有多种形态):
通过代码来感受一下语法:
class Program { static void Main(string[] args) { Fu f1 = new Zi(); Console.WriteLine(f1); f1.Show(); Zi z1 = new Zi(); Console.WriteLine(z1); z1.Show(); Console.ReadKey(); } } class Fu { public virtual void Show() //静态方法是不能重写的 { Console.WriteLine("父类的方法,在子类中将进行重写"); } } class Zi : Fu { public void SayHello(string name) { Console.WriteLine(name+"你好"); } public void SayHello(string name,string msg)//参数个数不同,和参数类型不同都可以构成重载 { Console.WriteLine(name + "你好: "+msg); } public override void Show() //重写了父类的方法 { Console.WriteLine("重写了父类的方法"); } //public new void Show() //当使用new关键字后在主函数中Fu的这个方法和Zi的这个方法成为了两个毫不相关的方法 //{ // Console.WriteLine("重写了父类的方法"); //} }
注意点:
隐藏,在子类中可以通过new 隐藏父类的方法
当子类与父类的参数不同时
当基类函数不是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载)
当基类函数是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载;因为参数不同,所以不是重写)
当子类与父类的参数相同时
当基类函数不是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载,因为基类不是虚函数,所以是隐藏不是重写)
当基类函数是虚函数时,基类函数将被覆盖。(因为子类和基类不在同一范围内,所以不是重载)
标签:
原文地址:http://www.cnblogs.com/fengxuehuanlin/p/4560026.html