大门对着上楼梯好吗:C#继承问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/09 07:25:07
public class Person
{
private string _name;
private uint _age;
public Person()
{
_name="李李李";
_age=19;
}

public void DispInfo()
{
Console.WriteLine("尊敬的{0},你的年龄为{1}",_name,_age);
}
}
public class Student:Person
{
private String _school;
public Student()
{
_school="烂学校";
}
public void Disp()
{
Console.WriteLine("学校:{0}",_school);
}
}
public class Exe
{
[STAThread]
static void Main(string[] args)
{
Person s=new Student();
s.DispInfo();
Console.ReadLine();

}
}
以上代码把父类定义的对象s实例化成Student,但是S还是只能用他本身类的方法
那我不如写成Person s=new Person ();
那Person s=new Student();起什么作用,
还有为什么不能写成Student s=new Person();这样编译都通不过;
解释下为什么?我那烂书没写这么详细。

基类对象只能使用基类的成员,不能使用派生类的;
基类对象可以是派生类对象的引用,这个是多态性的原理,也是虚函数的原理,这样基类对象可以调用基类的成员和派生类的虚函数;
派生类对象不能是基类的引用。

Person s = new Person(); 的话,s 引用的是一个 Person() 实例
但如果
Person s = new Student(); 的话,s 引用的是一个 Student() 实例,虽然 s 自己并不知道,但事实上是不一样的。

使用这种方式的好处是,对于一段通用的程序来说,s 只不关心它具体是什么,只关心它是 Person 就行了。利于代码的重用。