实验四 类的继承和多态

合集下载

C++程序设计实验报告(2024)

C++程序设计实验报告(2024)

引言概述:C++程序设计是一门广泛应用于软件开发领域的高级编程语言。

该语言具有高效、灵活和可靠的特性,使其成为许多领域的首选语言。

本实验报告旨在通过详细描述C++程序设计的实验内容和步骤,帮助读者更好地理解和掌握这门编程语言。

正文内容:一、基本语法和数据类型1.1声明和定义变量1.2数据类型及其修饰符1.3运算符和表达式1.4控制结构和循环语句1.5输入和输出流二、函数和指针2.1定义和调用函数2.2参数传递2.3递归函数2.4函数指针2.5引用和引用传递三、面向对象编程3.1类和对象3.2构造函数和析构函数3.3成员函数和访问修饰符3.4继承和多态性3.5虚函数和纯虚函数四、文件操作和异常处理4.1文件的读取和写入4.2文件指针和文件打开模式4.3异常处理概述4.4trycatch语句块4.5异常类的创建和使用五、动态内存管理和标准库5.1new和delete运算符5.2动态数组和指针数组5.3多维数组和指针数组5.4标准库的常用函数和容器5.5面向对象标准库的使用总结:通过本实验报告,我们详细介绍了C++程序设计的内容和步骤。

从基本语法和数据类型开始,我们讨论了变量的声明和定义,不同数据类型及其修饰符的使用,以及运算符和表达式的应用。

接下来,我们介绍了控制结构和循环语句的基本概念,并学习了输入和输出流的使用。

在函数和指针的部分,我们深入探讨了函数的定义和调用,参数传递的方式,以及递归函数的应用。

我们还介绍了函数指针的概念和使用方法,以及引用和引用传递的特点。

在面向对象编程的部分,我们学习了类和对象的概念,构造函数和析构函数的用途,成员函数和访问修饰符的作用,继承和多态性的实现方式,以及虚函数和纯虚函数的应用。

文件操作和异常处理是实际开发中经常遇到的情况,我们介绍了文件的读取和写入方式,文件指针和文件打开模式的应用,以及异常处理的基本概念和用法。

我们学习了动态内存管理的方法,包括new和delete运算符的使用,动态数组和指针数组的创建和销毁,以及多维数组和指针数组的应用。

Java实验报告继承、多态、接口和异常处理

Java实验报告继承、多态、接口和异常处理

Java实验报告继承、多态、接⼝和异常处理实验5 继承、多态、接⼝和异常处理⼀、实验⽬的1、掌握Java的类和对象的声明和使⽤⽅法;2、掌握Java的类的继承和实现⽅法;3、掌握多态性在类的继承中的运⽤;4、掌握接⼝的定义与使⽤;5、掌握基本异常的处理机制;6、熟悉try语句与catch语句的搭配使⽤;7、了解有异常处理与没有异常处理的差别;8、多重catch语句的使⽤;9、使⽤Throws声明异常和Throw抛出异常。

⼆、实验环境1、PC微机;2、DOS操作系统或 Windows 操作系统;3、Java sdk程序开发环境、eclipse集成环境。

三、实验内容1. 设计三个类,分别是学⽣类Student,本科⽣类UnderGraduate,研究⽣类Postjgraduate,其中Student类是⼀个抽象类,它包含学⽣的基本信息如姓名、所学课程、课程成绩等,⽽Undergraduate类和Postgraduate类都是Student类的⼦类,这两个类计算课程成绩等级的⽅法有所不同,如下表所⽰。

假设某班级⾥既有研究⽣⼜有本科⽣,编写程序统计出全班学⽣2. 和Mobilephone具体实现,并设计⼀个应⽤程序类来使⽤这些类。

3.要求设计⼀个GUI图形窗⼝程序,该程序让⽤户输⼊⼀个星期中的任意⼀天的数字1-7,然后输出该数字所对应的是星期⼏。

四、实验步骤实验内容⼀1.建⽴package experiment5_1,其最终⽬录结构如下:2.建⽴Student类:package experiment5_1;public abstract class Student {final static int CourseNo = 3;String name;String type;int[] courses;String courseGrade;public Student(String name) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name; courses = new int[CourseNo];courseGrade = "" ;}public abstract void calculateGrade();public String getName( ) {return name;}public String getType( ) {return type ;}public String getCourseGrade( ) {return courseGrade;}public int getCourseScore(int courseNumber) {return courses[courseNumber];}public void setName(String name) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name;}public void setType(String type) {this.type = type;}public void setCourseScore(int courseNumber, int courseScore) { //按课程索引号设置课程成绩this.courses[courseNumber] = courseScore ;}}3.建⽴外部类(1)研究⽣类Postjgraduatepackage experiment5_1;public class postgraduate extends Student {public postgraduate(String name) {super(name);type = "研究⽣";}public void calculateGrade() {// TODO Auto-generated method stubint total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += courses[i];};average = total / CourseNo;if (average>=90&&average<100) courseGrade = "优秀"; else if (average>=80&&average<90) courseGrade = "良好"; else if (average>=70&&average<80) courseGrade = "⼀般"; else if (average>=60&&average<70) courseGrade = "及格"; else courseGrade = "不及格";}}(2)本科⽣类UnderGraduatepackage experiment5_1;public class undergraduate extends Student {public undergraduate(String name ) {super(name);type = "本科⽣";}public void calculateGrade() {int total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += getCourseScore(i) ;};average = total / CourseNo;if (average>=80&&average<100) courseGrade = "优秀"; else if (average>=70&&average<80) courseGrade = "良好"; else if (average>=60&&average<70) courseGrade = "⼀般"; else if (average>=50&&average<60) courseGrade = "及格"; else courseGrade = "不及格";}}4.编写代码测试函数package experiment5_1;public class polymorphism {public static void main(String[] args) {Student[] students = new Student[5];students[0] = new undergraduate("陈建平");students[1] = new undergraduate("鲁向东");students[2] = new postgraduate("匡晓华");students[3] = new undergraduate("周丽娜");students[4] = new postgraduate("梁欣欣");for (int i=0; i<5 ;i++) {students[i].setCourseScore(0,87);students[i].setCourseScore(1,90);students[i].setCourseScore(2,78);}for (int i=0; i<5 ;i++) {students[i].calculateGrade();}System.out.println("姓名" + " 类型" +" 成绩");System.out.println("-----------------------");for (int i=0; i<5 ;i++) {System.out.println(students[i].getName( )+" "+students[i].getType( )+" "+students[i].getCourseGrade( ));}}}实验内容⼆1.建⽴package experiment5_2,其最终⽬录结构如下:2.写接⼝Soundable代码:package experiment5_2;public interface Soundable {public void increaseV olume( );public void decreaseV olume( );public void stopSound( );public void playSound( );}3.创建三个类Radio、Walkman和Mobilephone具体实现,分别添加代码:// Mobilephone类package experiment5_2;class Mobilephone implements Soundable{public void increaseV olume( ) {System.out.println("增⼤⼿机⾳量");}public void decreaseV olume( ) {System.out.println("减⼩⼿机⾳量");}public void stopSound( ) {System.out.println("关闭⼿机");}public void playSound( ) {System.out.println("⼿机发出来电铃声");}}// Walkman类package experiment5_2;class Walkman implements Soundable { public void increaseV olume( ) { System.out.println("增⼤随声听⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩随声听⾳量"); }public void stopSound( ) {System.out.println("关闭随声听");}public void playSound( ) {System.out.println("随声听发出⾳乐"); }}// Radio类package experiment5_2;class Radio implements Soundable{ public void increaseV olume( ) { System.out.println("增⼤收⾳机⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩收⾳机⾳量"); }public void stopSound( ) {System.out.println("关闭收⾳机");}public void playSound( ) {System.out.println("收⾳机播放⼴播"); }}4.创建people类及编写测试代码://People类package experiment5_2;class People {public void listen(Soundable s) {s.playSound( );}}//测试代码package experiment5_2;import java.util.Scanner;public class InterfaceTest {public static void main(String[] args) {int i;People sportsman = new People( );Scanner scanner = new Scanner(System.in);Soundable[] soundDevice = new Soundable[3];//往声⾳设备数组中放⼊能发声的设备soundDevice[0] = new Radio( );soundDevice[1] = new Walkman( );soundDevice[2] = new Mobilephone();System.out.println("你想听什么? 请输⼊选择:0-收⾳机1-随声听2-⼿机");i = scanner.nextInt( );//开始听声⾳sportsman.listen(soundDevice[i]);soundDevice[i].increaseV olume( );soundDevice[i].stopSound();scanner.close();}}实验内容三1.建⽴package experiment5_3,其最终⽬录结构如下package experiment5_3;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class DateTransf extends JFrame implements KeyListener{/****/private static final long serialVersionUID = 1L;private static DateTransf frm;private static JTextField txt;private static JTextField data;DateTransf() {setTitle("数字与星期转换");setLocation(700, 300);setSize(400,130);}public static void main(String[] args) {frm = new DateTransf();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(new GridLayout(2,2));txt = new JTextField(12);data = new JTextField(12);JLabel lable1 = new JLabel("输⼊数字:");JLabel lable2 = new JLabel("星期⼏:");frm.add(lable1);txt.addKeyListener(frm);frm.add(txt);frm.add(lable2);frm.add(data);frm.setVisible(true);}public void keyPressed(KeyEvent e) {if (e.getSource() == txt) {if (e.getKeyCode() == KeyEvent.VK_ENTER) // 判断按下的键是否是回车键{try {int number = Integer.parseInt(txt.getText());switch (number) {case 1:data.setText("Mon");break;case 2:data.setText("Tue");break;case 3:data.setText("Wen");break;case 4:data.setText("Thu");break;case 5:data.setText("Fri");break;case 6:data.setText("Sat");break;case 7:data.setText("Sun");break;default:JOptionPane.showMessageDialog(null, "您输⼊的数字不是1~7","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMATION_MESSAGE); break;}}catch (Exception e1) {// TODO: handle exceptionJOptionPane.showMessageDialog(null, "您输⼊的不是整数","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMA TION_MESSAGE); }}}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}}2.编译运⾏五、实验结果●实验内容⼀结果:●实验内容⼆结果:●实验内容三结果:六、实验⼩结1.这次实验的内容⽐较多,需要掌握Java的类和对象的声明和使⽤⽅法、Java的类的继承和实现⽅法、多态性在类的继承中的运⽤、接⼝的定义与使⽤、基本异常的处理机制、try语句与catch语句的搭配使⽤等等;2. 在实验过程中,重点是要区分好实例和类,灵活掌握类的调⽤。

python面向对象编程实验总结

python面向对象编程实验总结

python面向对象编程实验总结摘要:1.实验目的2.实验内容3.实验过程4.实验收获5.实验反思正文:python面向对象编程实验总结一、实验目的本次实验旨在加深对Python面向对象编程的理解和应用,通过实践掌握类、对象、继承、多态等概念,提高编程能力和解决实际问题的能力。

二、实验内容本次实验主要涉及以下内容:1.定义类和对象:学会如何创建类,实例化对象,并使用属性和方法对对象进行操作。

2.继承和多态:理解继承关系,实现多态,以便在一个父类中定义多个子类。

3.封装和初始化:掌握如何使用封装性来隐藏对象内部的实现细节,以及如何使用初始化方法对对象进行初始化。

4.异常处理:学习如何在面向对象的程序中处理异常,提高程序的健壮性。

三、实验过程1.编写第一个类:定义一个名为“Person”的类,包含姓名、年龄等属性,以及初始化方法和说话方法。

2.创建对象:实例化一个Person对象,并使用对象的方法和属性。

3.添加继承关系:定义一个名为“Student”的类,继承自Person类,添加学生特有的属性(如:班级、成绩等),并重写说话方法。

4.创建学生对象:实例化一个Student对象,并使用对象的方法和属性。

5.异常处理:在Student类中添加一个方法,当调用该方法时,如果成绩低于及格线,则抛出异常并显示警告信息。

6.测试实验:编写测试代码,验证各个类的功能是否正常运行。

四、实验收获通过本次实验,我对Python面向对象编程有了更深入的了解,掌握了类、对象、继承、多态等概念,提高了编程能力。

同时,我也学会了如何在面向对象的程序中处理异常,使程序更加健壮。

五、实验反思在本次实验中,我发现在编写代码的过程中,要注意类的封装性,避免在其他地方直接修改类的属性。

此外,在编写异常处理时,要确保异常信息清晰明了,便于程序调试。

最后,我要不断提高自己的编程能力,将所学知识应用到实际项目中。

总之,本次实验对我的编程技能提升有很大帮助,让我更加熟练地运用Python面向对象编程。

封装、继承和多态的概念

封装、继承和多态的概念

封装、继承和多态的概念
封装、继承和多态是面向对象编程中的三个重要概念,下面分别进行详细解释:
一、封装
封装是指将对象的属性和方法封装在一起,形成一个独立的单元,对外部隐藏对象的实现细节,只暴露必要的接口供外部使用。

封装可以有效地保护对象的数据和行为,避免外部的误操作和非法访问,提高了代码的安全性和可维护性。

在面向对象编程中,封装是实现信息隐藏和数据保护的重要手段。

二、继承
继承是指一个类可以从另一个类中继承属性和方法,从而可以重用已有的代码和功能。

继承是面向对象编程中实现代码复用的重要手段,可以减少代码的重复性,提高代码的可读性和可维护性。

继承可以分为单继承和多继承两种方式,单继承是指一个类只能从一个父类中继承,而多继承是指一个类可以从多个父类中继承属性和方法。

三、多态
多态是指同一个方法在不同的对象上可以有不同的行为,即同一个方法可以有多
种不同的实现方式。

多态是面向对象编程中的重要概念,可以提高代码的灵活性和可扩展性。

多态可以分为编译时多态和运行时多态两种方式,编译时多态是指方法的重载,即同一个类中可以有多个同名但参数不同的方法;而运行时多态是指方法的重写,即子类可以重写父类的方法,从而实现不同的行为。

通过多态,可以实现面向对象编程中的“开闭原则”,即对扩展开放,对修改关闭。

类的继承与多态性实验报告

类的继承与多态性实验报告

类的继承与多态性实验报告目录1.介绍2.什么是多态3.多态在Java中的技术基础4.示例5.多态的好处6.总结介绍之前的文章介绍过类的封装性和继承性,现在是时候聊聊面向对象编程的三大特性之一的最后一个类的多态性了。

多态的基础是继承(包括了接口的实现)和方法的覆盖。

什么是多态多态对应的英文单词是polymorphism,百度翻译给出的翻译是:n.多型现象,多态性; 多机组合形式;按字面意思就是多种状态、形态、姿态等等,潜台词就是某个东西具有多种状态、形态、姿态等等。

那是什么东西呢?在面向对象的编程语言里面(当然就包括Java了)就是某个方法或函数。

那方法的多种状态、形态、姿态有是个什么意思呢?这其实是指同一个方法具有多个方法体,就是方法的实现。

而方法的相同与否是由方法签名决定的。

所以,多态其实本质上是指同一个类的同一个方法却具有不同的行为特征。

状态、形态、姿态指的就是行为特征。

多态在Java中的技术基础然而,在Java中,同一个类里面是不可能存在两个签名相同而实现不同的方法的,否则的话会导致无法判断该执行哪个方法,因此在编译时就会报错。

所以,肯定是在两个类中才有可能存在两个签名相同而实现不同的方法,一个实现在这个类,另一个实现在另一个类。

而如果这两个类毫无瓜葛,那么肯定就与多态的本质(同一个类的同一个方法却具有不同的行为特征)自相矛盾了。

所以,这两个类肯定是有某种联系的。

我们再想想,什么概念是能够让两个不同的类却又能称为同一个类的?答案就是类的继承/扩展,就是现实中的“某东西是某类东西”的概念,就是“具体和抽象”的思想。

比如,男人是人,女人也是人,男人类和女人类就借助于人类建立了某种联系,而人类具有的某个行为在男人类和女人类中是有着不同体现的,比如人类的吃饭这个行为,男人类的体现是狼吞虎咽,女人类的体现是细嚼慢咽。

例子不是很恰当,但意思就是这么个意思。

所以说,Java里面多态的技术基础就是方法的覆盖,当然,在Java中覆盖不仅仅发生在类的继承/扩展上,还可能发生在接口的实现上。

[实验报告]类和对象

[实验报告]类和对象

[实验报告]类和对象
一、实验目的
通过本次实验,了解抽象的一种程序设计概念“类”和“对象”,理解类之间的继承与多态性,以及封装对对象的各种属性和行为,实现软件对象模型与真实世界对象间的映射。

二、实验内容
1.定义类与对象
(1)类是代表一类实体的抽象。

它包含了一个共同拥有的结构和行为。

类是面向对象程序设计的基本元素。

(2)对象是一个实例。

它拥有一个特定于其类型的属性,并表现出对应的行为。

对象是程序中实际的可操作的元素。

2.类的成员
(1)类的成员可以是变量,函数,常量等等。

(2)变量:类的成员变量可以存储数据成员和提供给类的方法,这些变量被称为实例变量;类变量存储类及其对象的信息。

(3)函数:类的成员函数用于封装一定的行为或对对象的设置,它可以访问实例变量和类变量的值,以及实现一定的功能。

多态性是指一个类可以根据不同环境要求而采用不同的行为。

接口就是把数据和逻辑封装在一起的内部接口。

实验4 继承性和多态

实验4 继承性和多态

实验四继承性和多态一、实验目的:熟悉JA V A中的继承性和多态性。

掌握子类的定义及用法,继承机制中的隐藏与覆盖。

子类的构造方法的用法,对象的上转型对象,抽象类与抽象方法等。

二、实验要求:1.根据下面的要求,编写Java应用程序实现:编写程序模拟中国人、美国人是人、北京人是中国人。

除主类外,程序中还有4个类:People、ChinaPeople、AmericanPeople和BeijingPeople类。

要求如下:●People类有权限是protected的double型成员变量height和weight,以及public voidspeakHello()、public void averageHeight()和public void averageWeight()方法。

●ChinaPeople类是People的子类,新增了public void chinaGongfu()方法。

要求ChinaPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。

●AmericanPeople类是People的子类,新增public void americanBoxing()方法。

要求AmericanPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。

●BeijingPeople类是ChinaPeople的子类,新增public void beijingOpera()方法。

要求ChinaPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。

Java继承与多态实验报告.doc

Java继承与多态实验报告.doc

Java继承与多态实验报告.doc
Java的继承与多态实验报告
本报告致力于分析Java继承与多态的概念、原理和作用,以及相关实验过程及其结果。

继承,又称为分类,是Java面向对象程序设计语言中定义类之间关系的重要技术。

它使一个类可以使用另一个基类中定义的方法和属性,在基类中已经定义了一些功能,子
类可以对基类功能进行拓展与定制。

《Java技术手册》得出结论,继承可以有效提高软件的复用性、可维护性和可重用性,使大型的、复杂的程序有条理层次。

多态是Java中一种特殊的程序结构,允许不同类的对象对相同的消息作出不同的响应,由程序的消息而不是对象的类型来决定对象的行为。

它是Java多态性的基础,使程
序能够在不同对象上进行操作,统一实现。

从实验中,可以明显看出Java继承与多态之间的联系:多态必须依赖于继承,当子
类被创建时,它继承了母类的方法以及特性,这样,它才能以逐渐上升的方式处理所有消息,而多态给了子类独特-->性的功能。

同时,多态也方便了代码重用,因为子类会继承
母类的方法和属性。

此外,结果表明,多态的优点使程序可以提高可重用性,它也减少了代码的重复编写,同时允许特定类之外的类可以得到适用。

它促进了软件不断更新,因为多态给开发人员提
供了以对象层次组织代码的方法。

本练习涉及到Java继承与多态概念的整体概述和实现细节,为完全理解多态的概念
打下了坚实的基础。

它提供了一个理解和使用这些概念的有用方式和指导。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《面向对象程序设计》课内
实验报告
2012年10月25日
目录
一、实验目的 (1)
二、实验内容 (1)
三、实验要点及说明 (1)
四、实现方法 (1)
五、实验结果 (2)
六、源程序清单 (2)
七、思考及总结 (3)
一、实验目的
1. 掌握类的继承机制。

2. 熟悉类中成员变量和方法的访问控制。

3. 熟悉方法或构造方法多态性。

二、实验内容
1. 设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected 类型的成员变量x和y,获取和设置x 和y值的public方法。

2. 设计一个表示二维平面上圆的类Circle,继承类Point,还包含有表示圆半径的protected类型的成员变量r、获取和设置r值的public方法、计算圆面积的public方法。

3. 设计一个表示圆柱体的类Cylinder,继承类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public方法。

4. 建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值。

三、实验要点及说明
对于上述各问题,主要采用建立相应的类及其方法来实现上述各问题的主要功能。

在每一问中都采用独立的类定义,并编写对应的方法。

通过Java Applet程序对程序进行赋初值,查看结果运行结果并进行相应的输出。

四、实现方法
对于问题1,建立Point包,含有表示坐标位置的protected类型的成员变量x、y,获取x 、y方法getX()、getY(),设置x 、y方法set(double n,double m);
对于问题2,建立类Circle,继承自类Point,还包含有表示圆半径的protected 类型的成员变量r、获取r值的方法getR()、设置r值的方法setR(double rr)、计算圆面积的方法CircleS();
对于问题3,建立类Cylinder,继承类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取h值的方法geth()、设置h的方法seth(double H)、计算圆柱体体积的方法Virt();
五、实验结果
图一Applet程序的运行结果六、源程序清单
Point包及类的源程序:
import java.awt.*;
import java.applet.*;
public class project extends Applet {
Cylinder Cylinder1=new Cylinder(12,33,25,6);
public void paint(Graphics g){
g.drawString("轴心位置坐标:"+ Cylinder1.getPoint(),1,10);
g.drawString("半径:"+ Cylinder1.getR(),1,30);
g.drawString("圆柱高:"+ Cylinder1.getHeight(),1,50);
g.drawString("圆柱体积:"+ Cylinder1.calculateT(),1,70);
}
}
class point {
protected double x,y;
point(){};
point(double x1,double y1){
x=x1;
y=y1;};
public void setPoint(double x1,double y1){
x=x1;
y=y1;
}
public String getPoint(){
return ("("+x+","+y+")");
}
}
class Circle extends point{
protected double r;
Circle(){}
Circle(double x1,double y1,double rr){
super(x1,y1);
r=rr;
}
public void setR(double rr){
r=rr;
}
public double getR(){
return r;
}
public double calculateM(){
return(3.141576*r*r);
}
}
class Cylinder extends Circle{
protected double h;
Cylinder(){}
Cylinder(double x1,double y1,double r1,double h1){
super(x1,y1,r1);
h=h1;}
public void setHeight(double h1){
h=h1;}
public double getHeight(){
return h;}
public double calculateT(){
return (calculateM()*h);}
}
七、思考及总结
完成本次课内试验后,又收获了很多东西。

熟悉了类的继承与引用,类的方法的建立及赋值和方法和构造方法的多态性。

相关文档
最新文档