实验三类的重载继承和多态Word下载.docx
《实验三类的重载继承和多态Word下载.docx》由会员分享,可在线阅读,更多相关《实验三类的重载继承和多态Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
系统管理员/学生/教师都有用户名和密码属性,并都有Login和显示自身信息的方法,另外,学生拥有班级和成绩两个特殊属性以及查询成绩这一方法,教师拥有部门和工资两个特殊属性以及查询工资这一方法,系统管理员可以添加学生和教师信息。
由于教师和学生个人信息不同,所以学生和教师重载基类的DisplayInfo方法。
(本例和教材一致,再次出现的目的是通过反复训练,理解继承的作用)
1)类的继承关系可以表示如下:
2)创建控制台应用程序,命名为SchoolManagement
3)创建名为User的基类,基类定义了用户名和密码属性,以及Login和DisplayInfo方法
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceSchoolManagement
{
publicclassUser
{
privatestringuserName;
//用户名
publicstringName
get{returnuserName;
}
set{userName=value;
privatestringpassword;
//密码
publicstringPassword
get{returnpassword;
set{password=value;
privatestringuserType;
//用户类型
publicstringUserType
get{returnuserType;
set{userType=value;
publicvoidLogin()
if(userName.Equals("
1"
)&
&
password.Equals("
))
DisplayPersonInfo();
publicvirtualvoidDisplayPersonInfo()//注意virtual关键字
Console.WriteLine("
姓名:
{0}"
userName);
用户类型:
userType);
}
2)创建名为Student的派生类,具备班级和成绩两个特殊属性,以及查询成绩的特殊方法,覆盖基类的显示个人信息方法
publicclassStudent:
User
privatestringclassID;
publicstringClassID
get{returnclassID;
set{classID=value;
privatefloatstuScore;
publicfloatStuScore
get{returnstuScore;
set{stuScore=value;
publicStudent()
UserType="
学生"
;
publicoverridevoidDisplayPersonInfo()
base.DisplayPersonInfo();
班级:
classID);
publicvoidCheckScore()
成绩:
this.stuScore);
3)创建名为Teacher的派生类,具备部门和工资两个特殊属性,以及查询工资的特殊方法,覆盖基类的显示个人信息方法。
publicclassTeacher:
privatestringdepartment;
//部门
publicstringDepartment
get{returndepartment;
set{department=value;
privatefloatsalary;
//工资
publicfloatSalary
get{returnsalary;
set{salary=value;
publicTeacher()
教师"
部门:
"
+this.department);
publicvoidcheckSalary()
工资:
+this.salary);
4)创建名为SysManager的派生类,具备插入学生信息和插入教师信息两个方法
publicclassSysManager:
publicSysManager()
管理员"
publicStudentInsertStudent()
Studentstu=newStudent();
stu.Name="
张郭郭"
stu.UserType="
stu.ClassID="
310730"
stu.StuScore=70;
returnstu;
publicTeacherInsertTeacher()
Teacherteacher=newTeacher();
teacher.Name="
李沙沙"
teacher.Department="
计算机系"
teacher.Salary=5000;
returnteacher;
5)在Program.cs的Main方法中调用以上类,测试效果如下:
classProgram
staticvoidMain(string[]args)
//系统管理员登录
SysManagersys=newSysManager();
sys.Name="
sys.Password="
sys.Login();
------------------------------"
);
//系统管理员录入学生和教师信息
Teacherteacher=sys.InsertTeacher();
Studentstu=sys.InsertStudent();
//显示教师信息,查询工资
teacher.DisplayPersonInfo();
teacher.checkSalary();
//显示学生信息,查询成绩
stu.DisplayPersonInfo();
stu.CheckScore();
6)最终运行效果如下
2.建立名为Shape的基类,要求是抽象类,在该类中提供一个publicabstractdoubleArea()的抽象方法,建立名为Circle的派生类,包括半径属性,实现面积计算,再建立一个名为Rectangle的派生类,包括长和宽两个属性,实现面积的计算。
程序如下:
usingSystem.Linq;
namespaceshape
请输入圆的半径:
doubler=double.Parse(Console.ReadLine());
shapes=newCircle(r);
圆的面积是:
s.Area());
请输入矩形的长和宽:
doublea=double.Parse(Console.ReadLine());
doubleb=double.Parse(Console.ReadLine());
shapef=newRectangle(a,b);
矩形的面积是:
f.Area());
Console.ReadLine();
publicabstractclassshape
{publicabstractdoubleArea();
publicclassCircle:
shape
privatedoubler;
publicdoubleR
{get{returnr;
}
set{r=value;
}
publicCircle(doubler)
{this.r=r;
publicoverridedoubleArea()
{return3.14*r*r;
publicclassRectangle:
privatedoublea;
publicdoubleA
{get{returna;
set{a=value;
privatedoubleb;
publicdoubleB
{get{returnb;
set{b=value;
publicRectangle(doublea,doubleb)
{this.a=a;
this.b=b;
{returna*b;
按ctrl+F5运行程序,结果如下:
实验总结(结论或问题分析):
通过实验详细的了解了有关定义抽象类和抽象类方法的注意事项,并且在抽象类中要使用关键字abstract。
抽象类方法没有实现代码,但该抽象类的派生类都必须重载该方法。
将派生类中的对应方法定义为重载方法,则使用override关键字修饰。
抽象类不能直接使用new关键字来直接创建对象,但可以将其与派生类的实例相关联。
实验成绩
任课教师签名