继承和多态特性的综合应用:
C# CODE:
class Inheritance
{
static void Main(string[] args)
{
PersonMember myperson = new PersonMember();
myperson.SayHello();
Console.ReadKey();
}
}
class PersonMember
{
private PersonStyle[] personlist;
public PersonMember()
{
//方法触发时引用指向的对象类型用来决定要触发哪个版本的方法
personlist = new PersonStyle[2];
personlist[0] = new OldPerson("steven", "老人");
personlist[1] = new NewPerson("wifi", "少年", "运动");
}
public void SayHello()
{
string login;
for (int count = 0; count < personlist.GetLength(0); count++)
{
Console.WriteLine(personlist[count]);
Console.WriteLine();
login=personlist[count].Re();
Console.WriteLine(login);
}
//personlist[0].Eating();
//Console.WriteLine();
//personlist[1].Rsleep();
}
}
abstract class PersonStyle
{
/// <summary>
/// Demonstrate a visual sign
/// </summary>
protected string name;
protected string category;
public PersonStyle(string Name, string Category)
{
name = Name;
category = Category;
}
/// <summary>
/// Returns a string including person information
/// </summary>
/// <returns></returns>
public override string ToString()
{
string result = "Name:" + name + "\n";
result +="Category:"+category+"\n";
return result;
}
/// <summary>
/// Define the pay method for every person
/// </summary>
/// <returns></returns>
public abstract string Re();
}
class NewPerson:PersonStyle
{
private string hobby;
/// <summary>
/// constructed funtion inference
/// </summary>
/// <param name="Name"></param>
/// <param name="Category"></param>
public NewPerson(string Name, string Category,string Hobby)
:base(Name,Category )
{
hobby =Hobby ;
}
public override string ToString()
{
string result = base.ToString();
result += "Hobby:" + hobby;
return result;
}
/// <summary>
/// Demonstrates indirect referecing through inheritance
/// </summary>
/// <returns></returns>
private string Sleeping()
{
return ("\n私有方法间接引用!");
}
public override string Re()
{
return (Sleeping());
}
}
class OldPerson:PersonStyle
{
//private int age;
/// <summary>
/// constructed funtion inference
/// </summary>
/// <param name="Name"></param>
/// <param name="Category"></param>
public OldPerson(string Name, string Category)
:base(Name,Category )
{
}
public override string Re()
{
return ("重写抽象方法!\n");
}
}
output:
Name:steven
Category:老人
重写抽象方法!
Name:wifi
Category:少年
Hobby:运动
私有方法间接引用!