您的位置:首页 > 其它

面向对象之父类变量指向子类实例对象分析

2015-06-09 19:52 344 查看
父类

public class person
{

public static string markup;

static person()
{
markup = "markup";
}
//无参数构造函数
//public person()
//{
//    Console.WriteLine("调用person构造函数");
//}
public person(int parage, string paraname, string parahobby)
{
age = parage;
name = paraname;
hobby = parahobby;
}

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 string hobby;

public string Hobby { get; set; }

public void SayHi()
{
Console.WriteLine("Person SayHi Method");
}

}


子类

public  class Student:person
{

public string No;

//调用无参构造函数,同时调用有参数构造函数的方式
public Student():base(123,"sdf","sd")
{
Console.WriteLine("调用Student的无参数构造函数");
}
public Student(string s):this()
{
Console.WriteLine("调用Student的有参数构造函数");
}
public void SayHi()
{
Console.WriteLine("大家好,我是{0},{1},{2}", this.Name, this.Age, this.Hobby);
}

}


person stu = new Student("ss");

1、父类变量可以指向子类的实例对象,反之则不可以。

2、当创建一个子类对象时,如果是它的父类变量接收的它的子类对象,那么它只能调用父类的成员;(此过程中,此父类变量指向了父类成员,并没有指向这个子类成员);

3、例外情况:通过重写(override),父类变量可以调用子类的重写方法;

4、子类继承父类的所有成员,但是只能访问父类的非私有成员;



Student onestu = new Student("ss");

1、当创建一个子类对象时,如果声明的变量也是子类类型;调用时,首先查找子类中是否有该成员,有则调用;如果没有,到它的父类中寻找,有则调用

person stu = new Student("ss");
Student onestu = (Student)stu;
onestu.SayHi();

1、强制类型转换成子类,重新指向子类的实例对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: