1、系统管理员/学生/教师都有用户名和密码属性,并都有Login和显示自身信息的方法,另外,学生拥有班级和成绩两个特殊属性以及查询成绩这一方法,教师拥有部门和工资两个特殊属性以及查询工资这一方法,系统管理员可以添加学生和教师信息。由于教师和学生个人信息不同,所以学生和教师重载基类的DisplayInfo方法。(本例和教材一致,再次出现的目的是通过反复训练,理解继承的作用)1)类的继承关系可以表示如下:2)创建控制台应用程序,命名为SchoolManagement3)创建名为User的基类,基类定义了用户名和密码属性,以及Login和DisplayInfo方法using System;using S
2、ystem.Collections.Generic;using System.Text;namespace SchoolManagement public class User private string userName;/用户名 public string Name get return userName; set userName = value; private string password;/密码 public string Password get return password; set password = value; private string userType;/用
3、户类型 public string UserType get return userType; set userType = value; public void Login() if (userName.Equals(1) & password.Equals() DisplayPersonInfo(); public virtual void DisplayPersonInfo() /注意virtual关键字 Console.WriteLine(姓名:0, userName);用户类型:, userType);2)创建名为Student的派生类,具备班级和成绩两个特殊属性,以及查询成绩的特殊
4、方法,覆盖基类的显示个人信息方法 public class Student : User private string classID; public string ClassID get return classID; set classID = value; private float stuScore; public float StuScore get return stuScore; set stuScore = value; public Student() UserType = 学生; public override void DisplayPersonInfo() base.D
5、isplayPersonInfo();班级:, classID ); public void CheckScore()成绩:, this.stuScore);3)创建名为Teacher的派生类,具备部门和工资两个特殊属性,以及查询工资的特殊方法,覆盖基类的显示个人信息方法。 public class Teacher : private string department;/部门 public string Department get return department; set department = value; private float salary;/工资 public float
6、 Salary get return salary; set salary = value; public Teacher()教师部门: + this.department); public void checkSalary()工资: + this.salary);4)创建名为SysManager的派生类,具备插入学生信息和插入教师信息两个方法 public class SysManager : public SysManager()管理员 public Student InsertStudent() Student stu = new Student(); stu.Name = 张郭郭 st
7、u.UserType = stu.ClassID = 310730 stu.StuScore = 70; return stu; public Teacher InsertTeacher() Teacher teacher = new Teacher(); teacher.Name = 李沙沙 teacher.Department = 计算机系 teacher.Salary = 5000; return teacher;5)在Program.cs的Main方法中调用以上类,测试效果如下: class Program static void Main(string args) /系统管理员登录
8、SysManager sys = new SysManager(); sys.Name = sys.Password = sys.Login();-); /系统管理员录入学生和教师信息 Teacher teacher = sys.InsertTeacher(); Student stu = sys.InsertStudent(); /显示教师信息,查询工资 teacher.DisplayPersonInfo(); teacher.checkSalary(); /显示学生信息,查询成绩 stu.DisplayPersonInfo(); stu.CheckScore();6)最终运行效果如下2建立
9、名为Shape的基类,要求是抽象类,在该类中提供一个public abstract double Area()的抽象方法,建立名为Circle的派生类,包括半径属性,实现面积计算,再建立一个名为Rectangle的派生类,包括长和宽两个属性,实现面积的计算。程序如下:using System.Linq;namespace shape请输入圆的半径: double r = double.Parse(Console.ReadLine(); shape s = new Circle(r);圆的面积是:, s.Area();请输入矩形的长和宽: double a = double.Parse(Cons
10、ole.ReadLine(); double b = double.Parse(Console.ReadLine(); shape f = new Rectangle(a, b);矩形的面积是:, f.Area(); Console.ReadLine(); public abstract class shape public abstract double Area(); public class Circle : shape private double r; public double R get return r; set r = value; public Circle(double
11、r) this.r = r; public override double Area() return 3.14* r * r; public class Rectangle : private double a; public double A get return a; set a = value; private double b; public double B get return b; set b = value; public Rectangle(double a, double b) this.a = a; this.b = b; return a * b;按ctrl+F5运行程序,结果如下:实验总结(结论或问题分析): 通过实验详细的了解了有关定义抽象类和抽象类方法的注意事项,并且在抽象类中要使用关键字abstract。抽象类方法没有实现代码,但该抽象类的派生类都必须重载该方法。将派生类中的对应方法定义为重载方法,则使用override关键字修饰。抽象类不能直接使用new关键字来直接创建对象,但可以将其与派生类的实例相关联。实验成绩任课教师签名