// inherit04.cs - Virtual Methods
//===============================================
using System;

class Person


{
protected string firstName;
protected string lastName;

public Person()

{
}

public Person(string fn, string ln)

{
firstName = fn;
lastName = ln;
}

public virtual void displayFullName()

{
Console.WriteLine("{0} {1}", firstName, lastName);
}
}

class Employee : Person


{
public ushort hireYear;

public Employee() : base()

{
}

public Employee(string fn, string ln, ushort hy) : base(fn, ln)

{
hireYear = hy;
}

public override void displayFullName()

{
Console.WriteLine("Employee: {0} {1}", firstName, lastName);
}
}

// A new class derived from Person
class Contractor : Person


{
public string company;

public Contractor() : base()

{
}

public Contractor(string fn, string ln, string c) : base(fn, ln)

{
company = c;
}

public override void displayFullName()

{
Console.WriteLine("Contractor: {0} {1}", firstName, lastName);
}
}

class NameApp


{
public static void Main()

{

//注意:在这里声明的是三个 Person 类型的变量,但是却用派生类来实例化了
Person Brad = new Person("Bradley", "Jones");
Person me = new Employee("Bradley", "Jones", 1983);
Person Greg = new Contractor("Hill", "Batfield", "Data Diggers");
//他们实际调用的是派生类中的方法
Brad.displayFullName();
me.displayFullName();
Greg.displayFullName();
}
}

运行结果:Bradley Jones
Employee: Bradley Jones
Contractor: Hill Batfield