在C#中也可以实现父类对象指向子类实现,但是这个对象不能直接调用子类中的普通方法,必须在父类中先写一个虚方法,然后再子类中对虚方法进行重写
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _继承
{
class Program
{
static void Main(string[] args)
{
Person person = new Teacher("liuyang", 23, "男", 2000.0);
person.SayHi(); //父类对象指向子类实现,C#中的方法和java不太一样
Console.ReadKey();
}
}
class Person
{
public Person(string name,int age,string sex)
{
this.Name = name;
this.Age = age;
this.Sex = sex;
}
//public Person() //子类需要调用父类的无参构造函数
//{
//}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
public string Sex
{
get;
set;
}
public virtual void SayHi()
{
}
}
class Teacher : Person
{
//public Teacher(string name, int age, string sex, double tsalary)
//{
// this.Name = name;
// this.Age = age;
// this.Sex = sex;
// this.TSalary = tsalary;
//}
//子类构造函数在调用时会默认调用父类中的无参构造,如果不想调用可以使用这种方法
public Teacher(string name, int age, string sex, double tsalary) : base(name, age, sex) //子类的构造函数在初始化之前会默认调用父类中的无参构造函数
{
this.TSalary = tsalary;
}
public double TSalary
{
get;
set;
}
public override void SayHi()
{
Console.WriteLine("hi~~~ 我的名字叫{0},年龄是{1},性别是{2},工资是{3}",Name,Age,Sex,TSalary);
}
}
}