面向对象编程:抽象类、多态与接口解析

需积分: 10 14 下载量 177 浏览量 更新于2024-11-27 收藏 350KB PDF 举报
"该资源是一本关于dot NET学习的电子书,专注于Visual C# 2005开发技术,主要讲解了第06章的内容,涵盖了抽象类、多态和接口这三个面向对象编程中的关键概念。" 在面向对象编程中,抽象类、多态和接口是核心要素,它们帮助开发者构建灵活、可扩展的软件系统。 1. 抽象类(Abstract Class) 抽象类是一种特殊的类,它不提供完整实现,而是为派生类提供一个基础模板。在C#中,如果一个类包含至少一个抽象方法,那么该类就必须声明为抽象类。抽象类不能被实例化,它的主要目的是作为其他类的基类,提供共享的属性和方法定义。例如,`BuyBookOperate` 是一个抽象类,它有一个抽象方法 `BuyBook`。抽象类可以包含抽象方法、属性、索引器和事件,但不能被密封(sealed),即不能阻止进一步的继承。派生自抽象类的非抽象子类必须实现所有抽象成员。 2. 多态(Polymorphism) 多态是面向对象编程的重要特性,它允许使用父类型引用指向子类型对象,并调用子类型的方法或属性。这使得代码更加通用和可扩展。例如,如果有多个具体的“买书”操作类(如`BuyOnlineBook`,`BuySecondhandBook`),它们都继承自抽象类`BuyBookOperate`,则可以通过`BuyBookOperate`类型的引用调用`BuyBook`方法,实现不同的购买行为。多态提高了代码的复用性和灵活性。 3. 接口(Interface) 接口是一种完全抽象的类型,它定义了一组方法签名,但不提供任何实现。接口类似于合同,定义了实现该接口的类必须遵循的规范。与抽象类不同,接口可以被一个类多重继承,一个类也可以实现多个接口。接口不能包含字段,但可以包含常量、方法、属性、索引器和事件的声明。实现接口的类必须提供所有接口成员的实现。 结合这三个概念,开发者可以设计出高度模块化和可扩展的软件架构。抽象类提供了一种基础结构,多态允许根据具体场景选择不同的行为,而接口确保了实现一致性。在C#中,这些机制共同促进了面向对象设计原则的实现,如单一职责原则(SRP)、开闭原则(OCP)等,从而提高代码的可维护性和可读性。
2017-03-02 上传
实验1 类的定义、对象数组的使用 1. 定义一个学生类(Student), 属性有 1)非静态属性String studentNumber 2)非静态属性String studentName 3)非静态属性int markForMaths 4)非静态属性int markForEnglish 5)非静态属性int markForScience 方法有: 1)构造方法Student(String number, String name) 2)构造方法Student() 3)String getNumber() 4)String getName() 5)void enterMarks(int markForMaths, int markForEnglish, int markForScience) 6)int getMathsMark() 7)int getEnglishMark() 8)int getScienceMark() 9)double calculateAverage() 10)String toString() 返回学生信息,包括学号、姓名、数学成绩、英语成绩、科学成绩、平均成绩。 注意:为了保证calculateAverage返回double类型,需要把三个分数的和除以3.0,而不是3. 另外,分数的初始值是什么?如果每个分数初始值为0,会造成混淆,分数为0表示还没有输入分数,还是分数确实为0?有更好的初始值吗? 编写Student类,并且编写一个StudentTest类,对Student类进行测试。 StudentTest类运行效果如下: 请输入学生学号:2011211301 请输入学生姓名:王晓 请输入学生三门课成绩(数学,英语,科学):88,79,90 学生信息如下: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 2.定义一个StudentList类用来存储Student对象 属性有 1)Student[] list; //list存储学生对象 2)int total; //学生总人数 方法有: 1)StudentList(int length) //length是数组长度 2)boolean add(Student stu) //增加stu到数组中,成功,返回true,否则false 3)boolean remove(int no) //删除第no个数组元素,删除成功,返回true,否则false 4)boolean remove(Student number) //删除学号为number的学生,删除成功,返回true,否则false 5)boolean isEmpty() //判断数组是否为空,若是,返回true,否则false 6)Student getItem(int no) //返回第no个学生 7)Student getItem(Student number) //返回学号为number的学生,若该生不存在,返回null。 8) int getTotal() 返回学生总人数 编写StudentList类,并且编写一个StudentListTest类,对StudentList类进行测试。 StudentListTest类运行效果: 菜单如下,请输入 1~8代表您要执行的操作: 1. 增加1个学生 2. 根据学号删除学生 3. 根据位置删除学生 4. 判断是否为空 5.根据位置返回学生 6.根据学号返回学生 7. 输出全部学生信息 8.退出程序 请输入您的操作:1 请输入学生信息: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 ---目前有1个学生,信息为---: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 请输入您的操作:1 学号:2011211311 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 ---目前有2个学生,信息为---: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 平均成绩:84.0 请输入您的操作:5 请输入学生位置:10 对不起,没有对应的学生 请输入您的操作:5 请输入学生位置:2 学生信息如下: 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 平均成绩:84.0 请输入您的操作:3 请输入要删除第几个学生:2 删除成功 ---目前有1个学生,信息为: