实验三类的重载继承和多态.docx

上传人:b****5 文档编号:5021554 上传时间:2022-12-12 格式:DOCX 页数:11 大小:64.26KB
下载 相关 举报
实验三类的重载继承和多态.docx_第1页
第1页 / 共11页
实验三类的重载继承和多态.docx_第2页
第2页 / 共11页
实验三类的重载继承和多态.docx_第3页
第3页 / 共11页
实验三类的重载继承和多态.docx_第4页
第4页 / 共11页
实验三类的重载继承和多态.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验三类的重载继承和多态.docx

《实验三类的重载继承和多态.docx》由会员分享,可在线阅读,更多相关《实验三类的重载继承和多态.docx(11页珍藏版)》请在冰豆网上搜索。

实验三类的重载继承和多态.docx

实验三类的重载继承和多态

实验报告

课程名称

面向对象程序设计

实验名称

实验三、类的重载继承和多态

日期

2015.4.14

学生学号

姓名

班级

实验目的:

1.编写一个单一继承的C#程序

2.编写一个抽象类,并用一个类继承这个抽象类

实验要求:

1.认真阅读、掌握和本实验相关的教材内容。

2.设计并编写代码完成题目要求的任务。

3.撰写实验报告。

实验内容与步骤:

1.在学校教务管理系统中,有三种用户,一种是系统管理员,一种是学生,一种是教师,编写C#类实现该继承关系。

系统管理员/学生/教师都有用户名和密码属性,并都有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("1"))

{

DisplayPersonInfo();

}

}

publicvirtualvoidDisplayPersonInfo()//注意virtual关键字

{

Console.WriteLine("姓名:

{0}",userName);

Console.WriteLine("用户类型:

{0}",userType);

}

}

}

2)创建名为Student的派生类,具备班级和成绩两个特殊属性,以及查询成绩的特殊方法,覆盖基类的显示个人信息方法

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceSchoolManagement

{

publicclassStudent:

User

{

privatestringclassID;

publicstringClassID

{

get{returnclassID;}

set{classID=value;}

}

privatefloatstuScore;

publicfloatStuScore

{

get{returnstuScore;}

set{stuScore=value;}

}

publicStudent()

{

UserType="学生";

}

publicoverridevoidDisplayPersonInfo()

{

base.DisplayPersonInfo();

Console.WriteLine("班级:

{0}",classID);

}

publicvoidCheckScore()

{

Console.WriteLine("成绩:

{0}",this.stuScore);

}

}

}

3)创建名为Teacher的派生类,具备部门和工资两个特殊属性,以及查询工资的特殊方法,覆盖基类的显示个人信息方法。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceSchoolManagement

{

publicclassTeacher:

User

{

privatestringdepartment;//部门

publicstringDepartment

{

get{returndepartment;}

set{department=value;}

}

privatefloatsalary;//工资

publicfloatSalary

{

get{returnsalary;}

set{salary=value;}

}

publicTeacher()

{

UserType="教师";

}

publicoverridevoidDisplayPersonInfo()

{

base.DisplayPersonInfo();

Console.WriteLine("部门:

"+this.department);

}

publicvoidcheckSalary()

{

Console.WriteLine("工资:

"+this.salary);

}

}

}

4)创建名为SysManager的派生类,具备插入学生信息和插入教师信息两个方法

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceSchoolManagement

{

publicclassSysManager:

User

{

publicSysManager()

{

UserType="管理员";

}

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方法中调用以上类,测试效果如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceSchoolManagement

{

classProgram

{

staticvoidMain(string[]args)

{

//系统管理员登录

SysManagersys=newSysManager();

sys.Name="1";

sys.Password="1";

sys.Login();

Console.WriteLine("------------------------------");

//系统管理员录入学生和教师信息

Teacherteacher=sys.InsertTeacher();

Studentstu=sys.InsertStudent();

//显示教师信息,查询工资

teacher.DisplayPersonInfo();

teacher.checkSalary();

Console.WriteLine("------------------------------");

//显示学生信息,查询成绩

stu.DisplayPersonInfo();

stu.CheckScore();

Console.WriteLine("------------------------------");

}

}

}

6)最终运行效果如下

2.建立名为Shape的基类,要求是抽象类,在该类中提供一个publicabstractdoubleArea()的抽象方法,建立名为Circle的派生类,包括半径属性,实现面积计算,再建立一个名为Rectangle的派生类,包括长和宽两个属性,实现面积的计算。

程序如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

namespaceshape

{

classProgram

{

staticvoidMain(string[]args)

{

Console.WriteLine("请输入圆的半径:

");

doubler=double.Parse(Console.ReadLine());

shapes=newCircle(r);

Console.WriteLine("圆的面积是:

{0}",s.Area());

Console.WriteLine("请输入矩形的长和宽:

");

doublea=double.Parse(Console.ReadLine());

doubleb=double.Parse(Console.ReadLine());

shapef=newRectangle(a,b);

Console.WriteLine("矩形的面积是:

{0}",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:

shape

{

privatedoublea;

publicdoubleA

{get{returna;}

set{a=value;}

}       

privatedoubleb;

publicdoubleB

{get{returnb;}

set{b=value;}

}

publicRectangle(doublea,doubleb)

{this.a=a;

this.b=b;

}

publicoverridedoubleArea()

{returna*b;}

}

}

按ctrl+F5运行程序,结果如下:

实验总结(结论或问题分析):

通过实验详细的了解了有关定义抽象类和抽象类方法的注意事项,并且在抽象类中要使用关键字abstract。

抽象类方法没有实现代码,但该抽象类的派生类都必须重载该方法。

将派生类中的对应方法定义为重载方法,则使用override关键字修饰。

抽象类不能直接使用new关键字来直接创建对象,但可以将其与派生类的实例相关联。

实验成绩

任课教师签名

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1