C#继承
描述: 继承允许我们根据一个类来定义另一个类, 建立类的关系,实现代码的利用、方便系统的扩展。继承类的所有成员,被继承的类称为父类或基类,继承其类的类称为子类或派生类。
特点:
- 派生类对应基类的扩展,派生类可以添加新的成员,但不能移除已经继承的成员的定义。
- 继承是可以传递的,如果C从B中继承,B有从A中继承,那么C不仅可以继承B中的声明,同时可以继承A中的声明。
- 构造函数和折构函数不被继承,除此之外其他成员被继承。基类的方式方式只能决定子类是否能访问它。
- 一个类不能提同时继承多个父类。
- 继承实现了代码重用、结构清晰。
语法(类之间的继承关系是通过冒号实现的,冒号前是派生类,后面是基类)
Class 基类类名
{
类的成员
}
Class 派生类:基类类名
{
类的成员
}
范例一
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication1 8 { 9 public class 简单继承 10 { 11 //运行入口 12 public static void Main(string[] age) 13 { 14 人 A = new 人(); 15 A.Age = 20; 16 A.Name = "小明"; 17 A.print(); 18 Console.ReadLine(); 19 } 20 } 21 22 public class 人类 23 { 24 public string name; 25 public string Name { get; set; } 26 public void print() 27 { 28 Console.WriteLine("姓名:{0}",this.Name); 29 } 30 } 31 32 public class 人:人类 33 { 34 public int age; 35 public int Age { get; set; } 36 public void print() 37 { 38 Console.WriteLine("姓名:{0},年龄{1}", this.Name,this.Age); 39 } 40 } 41 }
运行结果
疑问一:调用派生类运行,先实例化基类先还是子类呢(先执行谁的构造方法先)?
结论:如果子类继承父类,在实例化子类的时候,首先执行父类的构造函数,再执行子类的构造函数。
base关键字:调用父类成员方法
访问修饰符 类名(形参):base(实参) { 处理语句; }
如果在同名的方法中使用 base 关键字调用父类中的方法,则相当于把父类中的方法内容复制到该方法中。
注意:
- base关键字表示调用父类的构造方法
- base(参数1,参数2)中的参数只有参数名,没有数据类型
- 根据base()的参数个数决定调用父类的那个构造方法;
- base(参数1,参数2)中的参数名要和子类参数名相同
二、注意:基类派生类分别有类的带参构造方法,如果派生类没有实现基类的构造方法就提示错误了
提示父类需要0个参数的构造方法,为啥呢?不懂不明白!
三、派生类的方法 与基类方法一样,会有什么情况出现
四、虽然上面能运行,但是编译是错误的,解决方式:用New隐藏基类的方法
结论:如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为virtual和override,派生类方法就会隐藏基类方法。
五、派生类与基类方法一致情况正确写法。
结论: