c#定义抽象类Person、派生类Student和类Teacher
在C#中定义抽象类 Person
,以及派生类 Student
和 Teacher
,可以通过以下方式实现:
定义抽象类 Person
抽象类在C#中用于定义具有一些共同特征和行为的类,但不能被实例化,只能被继承。在抽象类中可以定义抽象方法和具体方法。
csharp// 抽象类 Person
public abstract class Person
{
// 抽象属性和具体属性
public string Name { get; set; }
public int Age { get; set; }
// 抽象方法(子类必须实现)
public abstract void Display();
// 具体方法(子类可以选择重写)
public virtual void Greet()
{
Console.WriteLine($"Hello, my name is {Name}.");
}
}
派生类 Student 和 Teacher
派生类继承自抽象类 Person
,可以实现抽象方法,并可以覆盖或扩展基类的方法和属性。
学生类 Student
csharp// 派生类 Student
public class Student : Person
{
// 新增学生特有的属性
public string School { get; set; }
// 构造函数
public Student(string name, int age, string school)
{
Name = name;
Age = age;
School = school;
}
// 实现抽象方法 Display
public override void Display()
{
Console.WriteLine($"Student Name: {Name}, Age: {Age}, School: {School}");
}
// 可选重写基类方法
public override void Greet()
{
Console.WriteLine($"Hello, I'm a student. My name is {Name}.");
}
}
教师类 Teacher
csharp// 派生类 Teacher
public class Teacher : Person
{
// 新增教师特有的属性
public string Subject { get; set; }
// 构造函数
public Teacher(string name, int age, string subject)
{
Name = name;
Age = age;
Subject = subject;
}
// 实现抽象方法 Display
public override void Display()
{
Console.WriteLine($"Teacher Name: {Name}, Age: {Age}, Subject: {Subject}");
}
// 可选重写基类方法
public override void Greet()
{
Console.WriteLine($"Hello, I'm a teacher. My name is {Name}.");
}
}
使用示例
csharpclass Program
{
static void Main()
{
// 创建学生对象
Student student = new Student("Alice", 20, "XYZ School");
student.Display(); // 调用 Student 类的 Display 方法
student.Greet(); // 调用 Student 类重写的 Greet 方法
// 创建教师对象
Teacher teacher = new Teacher("Bob", 35, "Math");
teacher.Display(); // 调用 Teacher 类的 Display 方法
teacher.Greet(); // 调用 Teacher 类重写的 Greet 方法
}
}
总结
通过定义抽象类 Person
和派生类 Student
、Teacher
,可以有效地组织和扩展具有共同特征的对象模型。抽象类提供了通用的属性和方法定义,而派生类则实现了具体的业务逻辑,同时可以重写基类的方法来实现特定的行为。