首页 > 代码库 > 初识继承和多态
初识继承和多态
1.继承:一个类可以使用另一个类的方法和属性(成员)
2.子类继承父类使用的符号是冒号
3.子类不能继承父类的构造函数
4.调用子类构造的时候,没有使用base关键字调用父类的指定的构造,默认调用父类的无参构造
5.base关键字
base.父类的属性
base.父类的方法
base.父类的成员
base(): 父类的构造
父类:
1 public class Person2 { 3 public Person(string name,int age)4 {5 this.Name = name;6 this.Age = age;7 } 8 }
子类:
1 public class Student:Person 2 { 3 public Student(string name, int age, Gender sex):base(name,age) 4 { 5 //this.Name = name; 6 //base.Age=age; 7 this.Sex = sex; 8 } 9 10 }11
--总结:base(参数1,参数2) 顺序是根据父类构造的参数顺序保持一致
但是变量名是和子类构造的参数变量名保持一致的
6.继承的两大特性:
单根性:一个类只能有一个直接父类
传递性:A是B的父亲B是C的父亲 (A是爷爷 C是孙子) C也可以继承A
7.访问修饰符
public: 任何位置都可以使用
protected 当前类和子类
private 当前类
new子类底层原理
1.走到子类构造,不进入构造体
2.转向父类,进入父类构造体执行
3.转回子类构造,执行子类构造体
4.转到main方法,内存中构建出子类对象
多态初步:
多态:不同的对象对于同一种操作,做出的响应不同
父类Animal类:
1 public class Animal2 {3 public virtual void sayHello()4 {5 Console.WriteLine("父类打招呼的方法");6 }7 }8
子类Dog类:
1 public class Dog:Animal2 {3 public override void sayHello()4 {5 Console.WriteLine("汪汪");6 }7 }
子类Cat类:
1 public class Cat:Animal2 {3 public override void sayHello()4 {5 Console.WriteLine("喵喵");6 }7 }
main方法:
1 public class Program 2 { 3 static void Main(string[] args) 4 { 5 List<Animal> list=new List<Animal>(); 6 Dog dog=new Dog(); 7 Cat cat=new Cat(); 8 list.Add(dog); 9 list.Add(cat);10 foreach (Animal animal in list)11 {12 //方式一13 //animal.sayHello();14 15 //方式二 不使用统一调用16 if (animal is Dog)17 {18 Dog dg = animal as Dog;19 dg.sayHello();20 }21 if (animal is Cat)22 {23 Cat ct = animal as Cat;24 ct.sayHello();25 }26 }27 }28 }
总结:
1.实现方法重写
2.父类中定义SayHello()方法,用virtual关键字定义为虚方法。
3.在子类中定义子类自己的sayHello()方法,用override关键字修饰,就实现了对父类sayHello()方法的重写
初识继承和多态
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。