本帖最后由 qsq0000hm 于 2014-7-21 13:29 编辑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 练习20
{
public enum gender
{ 男,女}
class Program
{
static void Main(string[] args)
{
person p1 = new person();
p1.SayHi();
person p2 = new Employee();
p2.SayHi();
Employee p3 = new Employee();
p3.SayHi();
Console.ReadKey();
}
}
class person
{
string name;
public string Name
{
get { return name; }
set { name = value; }
}
gender sex;
public gender Sex
{
get { return sex; }
set { sex = value; }
}
int age;
public int Age
{
get { return age; }
set { age = value; }
}
public virtual void SayHi()
{
Console.WriteLine("hello!");
}
}
class Employee : person
{
decimal salary;
public decimal Salary
{
get { return Salary; }
set { Salary = value; }
}
public override void SayHi()
{
Console.WriteLine("员工说hello");
}
public void SaySorry()
{
Console.WriteLine("sorry!");
}
}
}
以上是创建了一个父类person,一个子类Employee。
person p1 = new person();
p1.SayHi();
p1调用的是父类方法没问题。
Employee p3 = new Employee();
p3.SayHi();
p3调用子类重写后的方法,也没问题。
person p2 = new Employee();
p2.SayHi();
这样运行结果表示p2也是调用子类重写后的方法,那么为什么p2,没有办法调用子类中特有的方法和属性,比如SaySorry()和decimal salary。
是不是因为这样写:person p2 = new Employee();调用的是父类的构造方法,并且子类中没有重载构造方法,所以不能访问子类特有的方法和属性?
|