继承
我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中, 作为这些类的父类。
Student,Teacher,Driver 子类 派生类Person 父类 基类
子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,子类就调用不到了,所以子类会报错。解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显示的调用父类的构造函数,使用关键字:base()
new 关键字
1,创建对象
2,隐藏从父类哪里继承过来的同名成员
里氏转换
1,子类可以赋值给父类
2,如果父类中装的是子类对象,那么可以将这个父类强转为子类
is:表示类型转换,如果能成功转换则返回一个true,否则返回一个false
if(p is Teacher){
....
}
as:表示类型转换,如果能成功转换则返回对应对象,否则返回一个null
Teacher t=p as Teacher
我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中, 作为这些类的父类。
Student,Teacher,Driver 子类 派生类Person 父类 基类
子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,子类就调用不到了,所以子类会报错。解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显示的调用父类的构造函数,使用关键字:base()
new 关键字
1,创建对象
2,隐藏从父类哪里继承过来的同名成员
里氏转换
1,子类可以赋值给父类
2,如果父类中装的是子类对象,那么可以将这个父类强转为子类
is:表示类型转换,如果能成功转换则返回一个true,否则返回一个false
if(p is Teacher){
....
}
as:表示类型转换,如果能成功转换则返回对应对象,否则返回一个null
Teacher t=p as Teacher