1.继承是允许重用现有类去创建新类的过程。子类继承父类,一个子类只能有一个父类,父类可以有多个子类。子类具备父类的功能和属性,父类不具备子类的。
格式 子类:父类 (用冒号隔开)
2.子类父类变量的相互赋值
构成继承关系的父类和子类对象之间有一个重要的特性:子类对象可以被当成基类对象使用。
子类可以直接转换成父类,但是父类不具备子类的属性和方法。
父类转换为子类是有条件的,这个父类的对象必须是由某个子类的对象转换来的,才能再转换回去。
using System; using System.Collections.Generic; using System.Text; namespace 博客整理实例 { class Program { static void Main(string[] args) { dongwu da = new dongwu(); da.zhonglei = "动物";//继承shengwu父类,可以直接点出shengwu类的变量 Console.WriteLine(da.zhonglei); da.shengming(); shengwu sa = da; sa.Name = "马";//转换成父类,只能点出父类的变量 Console.WriteLine(sa.Name); sa.shengming(); dongwu za = (dongwu)sa;//再转换为dongwu类 za.Name = "羊"; za.food = "草"; Console.WriteLine(za.Name+" "+za.food); za.shengming(); Console.ReadLine(); } } }
using System; using System.Collections.Generic; using System.Text; namespace 博客整理实例 { class shengwu { public string zhonglei; private string _Name; public string Name { get { return _Name; } set { _Name = value; } } public void shengming() { Console.WriteLine("生物是生命体"); } } }
using System; using System.Collections.Generic; using System.Text; namespace 博客整理实例 { class dongwu:shengwu //继承父类shengwu { public string food; private string _Dname; public string Dname { get { return _Dname; } set { _Dname = value; } } public void shengming() { Console.WriteLine("动物是人类的朋友"); } } }
运行结果
3.方法的重载和隐藏
重载:子类有父类的同名函数,输入参数不同
隐藏:当子类与父类拥有完全一样的方法时,称“子类隐藏了父类的同名方法”。
当子类和父类的方法完全相同时,调用的时候取决于声明的类型(=号左面),而不是实例化的类型。
如上面的例子,调用的方法。
4.方法的重写
方法的重写:通过子类转换成父类后,通过父类调用函数,执行的是子类的函数,这就是函数的重写
父类变量引用的是子类对象,则调用的是子类定义的方法;父类变量引用的是父类对象,
则调用的是父类定义的方法。也就是说调用哪个方法取决于父类变量引用的真实对象类型,而与父类变量无关。
父类方法关键词virtual 子类方法关键词override
using System; using System.Collections.Generic; using System.Text; namespace 博客整理实例 { class Program { static void Main(string[] args) { dongwu da = new dongwu(); da.shengming(); shengwu sa = da; sa.shengming(); shengwu ssa = new shengwu(); ssa.shengming(); dongwu za = (dongwu)sa;//再转换为dongwu类 za.shengming(); Console.ReadLine(); } } }
using System; using System.Collections.Generic; using System.Text; namespace 博客整理实例 { class shengwu { public string zhonglei; private string _Name; public string Name { get { return _Name; } set { _Name = value; } } public virtual void shengming() { Console.WriteLine("生物是生命体"); } } }
using System; using System.Collections.Generic; using System.Text; namespace 博客整理实例 { class dongwu:shengwu //继承父类shengwu { public string food; private string _Dname; public string Dname { get { return _Dname; } set { _Dname = value; } } public override void shengming() { Console.WriteLine("动物是人类的朋友"); } } }
运行结果