c#定义抽象类Person、派生类Student和类Teacher

在C#中定义抽象类 Person,以及派生类 StudentTeacher,可以通过以下方式实现:

定义抽象类 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}."); } }

使用示例

csharp
class 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 和派生类 StudentTeacher,可以有效地组织和扩展具有共同特征的对象模型。抽象类提供了通用的属性和方法定义,而派生类则实现了具体的业务逻辑,同时可以重写基类的方法来实现特定的行为。