.Net 视频学习第2季 C#面向对象
面向对象 继承
编程习惯,为每一个类都开一个新的cs类文件。
public class Person{ public string Name { get;set;} public int Age { get;set;} public string Gender { get;set;} public void walk() { Console.WriteLine("I walk!"); }}public class Student:Person{}
类的继承具有单根性和传递性,查看各个类之间的关系可以右键项目名称--->视图--->查看类图。
子类(派生类)能继承(使用)父类的属性和方法,但不能使用父类的私有字段。本质上子类对象在创建时创建了一个父类对象(因此可以使用其属性和方法)。默认情况下,子类对象创建时,会先调用父类的无参的构造函数。因此如果父类中定义了有参的构造函数(从而默认的无参构造函数被销毁)而又没有自定义无参构造函数,子类就无法默认地调用父类的无参构造函数来创建父类对象,从而报错。
解决办法一:父类中自定义无参构造函数(如果构造了有参构造函数的话)---这不是常见做法,因为基本上没有意义
解决办法二:在子类创建父类对象的时候,显式调用父类的有参构造函数,使用关键字 :base()
public class Person{ public string Name { get;set;} public int Age { get;set;} public string Gender { get;set;} public void walk() { Console.WriteLine("I walk!"); } public Person(string name, int age, string gender) { this.Name = name; this.Age = age; this.Gender = gender; } }public class Student:Person{ public Student(string name, int age, string gender, int id) :base(name, age, gender) { this.Id = id; } public int Id { get;set;}}
Object 是所有类的基类。
如果子类定义了和父类方法同名的方法,则子类中定义的方法会自动隐藏掉从父类继承过来的方法。如果是有意隐藏,可以在访问修饰符(例如public)和返回值类型(例如void)中添加关键字new。