namespace Assets
{
class Student:Person //子类Person继承了父类
{
static void Main(string[] args)
{
Person p1 = new Person(); // new Person();才是创建新对象
//父类型引用 指向 父类型对象
//现象:只能访问父类成员
Student s1 = new Student();
//子类型引用 指向 子类型对象
//现象:能够访问父类成员/也可以访问子类成员
Person p2 = new Student();
//父类型引用 指向 子类型对象
//现象:只能够访问父类成员(受类型制约),但是p2中是有Student类型的成员的(受类型制约无法引用)
//如果需要父类型引用访问子类型成员,需要将引用的数据类型进行转换
Student s4 = p2 as Student;
//as转换失败的话则结果为null
//Student s2 = new Person();
//不存在子类型引用指向父类型对象,因为s2可以引用Stundent类中的成员,但这些成员Person类中可能不存在。
//以下为实例讲解
//以此为例: Person p2 = new Student();
//可以调用什么成员取决于引用的类型(即p2的类型-Person),需要看Persson类中有什么成员,就可以引用这些成员(可以引用但不代表能引用成功)
//而能否引用成功该成员则取决于后面创建的对象类型("new 类名()")是否有该成员,即Stundent类中有这种成员就可以引用成功,没有的话将会引用失败
//成员指的就是类中定义的变量、方法等;
}
}
}