继承:
1.可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员单独封装到一个类中,作为类的父类。
子类——派生类
父类——基类
子类访问不到父类的私有字段。子类并不继承父类的构造函数,但会默认调用父类五参数构造函数,创建父类对象,使可以使用父类中的成员。所以,如果在父类中的成员重新写有参构造函数,子类调用不到因此会出现报错。
1.此时需要在父类中重新写一个无参构造。
2.在子类中显示调用函数的父类构造函数,使用关键字base()
特性:
1.单根性:一个子类只能继承一个父类。
2.传递性
注意:object是所有类的基类。
using System;
namespace homework
{
class Program
{
public class Person
{
private string _name;
public string Name
{
get{return _name;}
set{_name=value;}
}
private int _age;
public int Age
{
get{return _age;}
set{_age=value;}
}
private char _gender;
public char Gender
{
get{return _gender;}
set{_gender=value;}
}
public void CHLSS()
{
Console.WriteLine("吃喝拉撒睡");
}
public Person(string name,int age,char gender)
{
this.Name=name;
this.Age=Age;
this.Gender=gender;
// this.ID=id;
}
}
public class Student:Person
{
private int _id;
public int ID
{
get{return _id;}
set{_id=value;}
}
public void Study()
{
Console.WriteLine("学生学习");
}
public Student(string name,int age,char gender,int id)
:base(name,age,gender)
{
this.ID=id;
}
}
public class Teacher:Person
{
private double _salary;
public double Salary
{
get{return _salary;}
set{_salary=value;}
}
public void Teach()
{
Console.WriteLine("老师教书");
}
public Teacher(string name,int age,char gender,double salary)
:base(name,age,gender)
{
this.Salary=salary;
}
}
public class Driver:Person
{
private double _driveTime;
public double DriveTime
{
get{return _driveTime;}
set{_driveTime=value;}
}
public void Drive()
{
Console.WriteLine("司机开车");
}
public Driver(string name,int age,char gender,double driveTime)
:base(name,age,gender)
{
this.DriveTime=driveTime;
}
public static void Main()
{
Student s=new Student("张三",12,'n',12);
Console.WriteLine(s.Name);
Console.ReadLine();
}
}
}
}
new关键字:
作用
1.创建对象
2.隐藏从父类那里调用的同名方法