面向对象的继承
1、我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员(属性、方法)单独封装到一个类中,作为这些类的父类。
(1)子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
(2)子类并没有继承父类的构造函数,默认会调用父类的无参构造函数,创建父类对象,让子类可以使用父类中的成员。
(3)如果在父类中写了一个带参数的构造函数,那么默认自带的午餐构造函数就被替代了,子类就调用不了此无参构造函数了。
解决方法:
(1)在父类重新写一个无参数的构造函数
(2)在子类中显示调用父类的构造函数,使用关键字:base()
2、Object 所有类的父类(基类)
例子:
父类Person
//学生:叫美丽 10岁 爱好洗碗 性别女
//老师:职业老师 叫刚子 喜欢游泳 性别男 技能教书 40岁
//2个类共有的属性:姓名 性别 年龄 爱好
//Person为父类
public class Person {
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public string Hobby { get; set; }
//使用构造函数初始化
public Person(string name,string sex,int age,string hobby)
{
this.Age = age;
this.Name = name;
this.Sex = sex;
this.Hobby = hobby;
}
}
子类1
//学生类继承Person
public class Student:Person
{
//子类显式调用父类构造函数:base(父类的构造函数)
public Student(string name, string sex, int age, string hobby) : base(name, sex, age, hobby) { }
public void Stu()
{
Console.WriteLine("我叫{0},今年{1}岁了,我是一个{2}生,我的爱好是{3}",Name,Age,Sex,Hobby);
}
}
子类2
//老师类继承Person
public class Teacher : Person
{
public string Position { get; set; }
public string Skill { get; set; }
//调用父类构造函数
public Teacher(string name, string sex, int age, string hobby, string position, string skill) : base(name, sex, age, hobby)
{
this.Position = position;
this.Skill = skill;
}
public void Te()
{
Console.WriteLine("我叫{0},今年{1}岁了,我是一个{2},我的爱好是{3},我的技能是{4},我的职业{5}", Name, Age, Sex, Hobby,Skill,Position);
}
}
主函数
class Program
{
static void Main(string[] args)
{
//调用子类对象(对象实例化)
Student student = new Student("美丽","女",19,"洗碗");
Teacher teacher = new Teacher("刚子", "男", 20, "游泳", "老师", "教书");
//调用子类方法
student.Stu();
teacher.Te();
}