实验六继承性与多态性

合集下载

C++实验报告五--继承与多态性 -

C++实验报告五--继承与多态性 -

南昌航空大学实验报告2011年11月16号课程名称:面向对象程序设计B 实验名称:继承与多态性班级:姓名:同组人:无指导教师评定: 签名:一、实验目的根据现有类建立新类;学习构造基类和虚函数的用法。

二、实验内容应用VC++6.0的编辑环境构造一个类Jhtx及其派生类,该类主要实现关于几何图形的基本操作。

对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。

试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。

三、概要设计要实现的功能:求类圆和矩的面积、周长,求类圆的派生类圆球和圆柱表面积、体积;函数原型:double Ball::GetArea();double Ball::Getvolume();double Circle::GetArea();double Circle::Getperimeter();double Column::GetArea();double Column::Getvolume(); double Rectangle::GetArea(); double Rectangle::Getperimeter(); void Show();四、详细设计定义纯虚函数:virtual double Get_Girth()=0; virtual double Get_Volume()=0;virtual double Get_SurArea()=0; virtual double Get_Area()=0;求圆的面积的操作:double Circle::GetArea(){return M*radiums*radiums;}求圆周长的操作:double Circle::Getperimeter(){return 2*M*radiums;}求球表面积的操作:double Ball::GetArea(){return 4.0*M*radiums*radiums;}求球体积的操作:double Ball::Getvolume(){return 4/3*M*radiums*radiums*radiums;}求圆柱表面积的操作:double Column::GetArea(){return 2*M*(radiums*H+radiums*radiums);}求圆柱体积的操作:double Column::Getvolume(){return M*H*radiums*radiums;}求矩形面积的操作:double Rectangle::GetArea(){return Long*Wide;}求矩形周长的操作:double Rectangle::Getperimeter(){return 2*(Long+Wide);}五、程序调试在函数调试的过程中,出现了以下错误提示信息:1、 error C2470: “Circle”: 看起来像函数定义,但没有参数列表;跳过明显的函数体;原因为在语句“double Circle::GetArea()”将域作用符“::”错写为“:“;经调试无误后,运行的结果为:六、实验总结通过这次的试验,我明显的感觉到自己对这方面的知识掌握的还不够熟练,不能顺利地、流畅地运用这方面的知识,因为我没有在规定的时间内完成程序的设计,课后还是要多复习。

实验6类的继承与多态

实验6类的继承与多态

实验6类的继承与多态
实验6 类的继承与多态
实验目的及要求:
1)掌握继承、多态和向上转型的概念与实现方法;
2)掌握成员变量的隐藏和方法重写;
3)掌握关键字super的使用。

实验类型:设计型
实验内容:
(1)请编程实现如下需求:乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin)、大提琴(Cello),三种乐器的弹奏play()方法各不相同。

编写一个测试类InstrumentTest,要求编写方法testPlay(Instrument in),对这三种乐器进行弹奏测试。

要依据乐器的不同,进行相应的弹奏测试,在main()方法中进行测试。

(2)定义Mother类及其属性(身高、体重、年龄)和方法(工作、做家务);定义Daughter类继承Mother类,并增加一些属性(爱好)和方法(看动画片)。

定义一个类UseExtends,在该类的main方法中创建一个名为daughter的对象,使用Mother类和Daughter类的属性和方法进行测试。

(3)定义一个交通工具类Vehicle,包含属性(speed, name, color)和方法(start, stop, run);再定义一个飞行器子类Aircraft继承自Vehicle类。

然后从Aircraft类派生两个子类:航天飞机(SpaceShuttle)和喷气式飞机(Jet)。

实验报告要求:每个程序写出设计思路、主要代码、调试过程中遇到的问题及解决方案。

实验报告5 继承与多态

实验报告5 继承与多态

实验名称:继承与多态一.实验目的:((1)理解继承的含义,掌握派生类的定义方法和实现;(2)理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。

(3)编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序;(4)编写体现类多态性(成员方法重载,构造方法重载)的程序。

(5)理解接口和抽象类、抽象方法的定义和实现方法;(5)理解接口和抽象类的差别。

二.上机内容:(1)进行类的继承和基类构造方法的应用的练习;(2)进行类的多态性练习(3)进行抽象类和接口的练习(4)整理上机步骤,总结经验和体会。

(5)完成实验报告。

三.上机步骤:类的继承和基类构造方法的应用(1)编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。

要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。

using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication2{class person{public string bh;//编号public string xm;//姓名public person(string bh, string xm){this.bh = bh;this.xm = xm;}public void show(){Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);}}class student : person{public string bj;//班级public int cj;//成绩public student(string sbh, string sxm, string sbj, int scj): base(sbh, sxm){bh = sbh;xm = sxm;bj = sbj;cj = scj;}public new void show(){Console.WriteLine("***student***");Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);Console.WriteLine("班级:{0}", bj);Console.WriteLine("成绩:{0}", cj);}}class teacher : person{public string zc;//职称public string bm;//部门public teacher(string tbh, string txm, string tzc, string tbm) : base(tbh, txm){bh = tbh;xm = txm;zc = tzc;bm = tbm;}public new void show(){Console.WriteLine("***teacher***");Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);Console.WriteLine("职称:{0}", zc);Console.WriteLine("部门:{0}", bm);}}class program{static void Main(string[] args){student st = new student("050013", "张三", "信管091", 91);st.show();teacher te = new teacher("046950", "范仲淹", "特级教师", "教务处"); te.show();Console.ReadLine();}}}运行结果:(2)将以上程序尝试改成通过调用基类构造方法的方式来初始化编号和姓名,并总结调用基类构造方法的应用要点。

c#第6章 继承与多态性

c#第6章 继承与多态性

例如: 例如: class Humen { public string name; name; public string sex; sex; public string work ; } class Teacher:Humen Teacher: { public string speciality ; public string department; department; } Human是基类 Teacher是派生类 Human是基类,Teacher是派生类,它拥有基类 是基类, 是派生类, 的全部成员。 的全部成员。
派生类隐藏基类成员 :用new关键字。 new关键字 关键字。 隐藏基类的字段成员: 隐藏基类的字段成员: 派生类可以声明与基类有相同的名称和类型的字 派生类可以声明与基类有相同的名称和类型的字 段成员来隐藏基类的字段。 来隐藏基类的字段 段成员来隐藏基类的字段。这时通过派生类引用 或对象访问的是派生类的字段, 或对象访问的是派生类的字段,基类的相应成员 被屏蔽了。但是通过指向派生类对象的基类引用 被屏蔽了。但是通过指向派生类对象的基类引用 访问的则是基类的字段。 访问的则是基类的字段。 隐藏基类的方法成员: 隐藏基类的方法成员: 派生类可以声明与基类有相同的方法名称和形参 表的方法成员来隐藏基类的方法 基类的方法, 表的方法成员来隐藏基类的方法,与返回类型无 这时通过派生类引用或对象访问的是派生类 关。这时通过派生类引用或对象访问的是派生类 的方法成员,基类的相应方法成员被屏蔽了。 的方法成员,基类的相应方法成员被屏蔽了。但 是通过指向派生类对象的基类引用访问的则是基 指向派生类对象的基类引用访问的则是 是通过指向派生类对象的基类引用访问的则是基 类的成员。 类的成员。 派生类中可以通过 可以通过base关键字访问被隐藏的基 在派生类中可以通过base关键字访问被隐藏的基 类成员。 类成员。 详见例MaskBase。 详见例MaskBase。

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. 在实验过程中,重点是要区分好实例和类,灵活掌握类的调⽤。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

继承性和多态性

继承性和多态性



4.2 多态性 4.3 抽象类和接口

抽象类 接口

4.4 初始化块
继承性和多态性 开始 返回 上一页 下一页 2
4.1 继承性
类具有继承性,子类对父类的继承关系体现了特殊和 一般的关系。通过继承可以更有效地组织程序结构, 明确类间关系,并充分利用已有的类来完成更复杂、 深入的开发。
Java中的所有类都是ng.Object类的子类。
下一页上一页返回开始可编辑ppt1042多态是面向对象程序设计语言的一个重要特性在java中可以在同一类或不同类中定义名称相同但是操作不同的多个方法多态性指的是运行时判断应该执行哪个方法代码的能力这种能力也叫动态绑定
第4章 继承性和多态性
主要内容

4.1 继承性

派生类的定义 super关键字 protected和final关键字
3. native关键字(略)
native修饰的方法称为本地方法,此方法使用的目的是为了将其它语言 (例如,C、C++、FORTRAN、汇编等)嵌入到Java语言中。这样可以充 分利用已经存在的其它语言的程序功能模块,避免重复编程。
继承性和多态性
开始
返回
上一页
下一页
9
4.2 多态性

【JAVA最重要的特性】
继承性和多态性
开始
返回
上一页
下一页
4
4.1.2 super关键字
1. 数据成员的隐藏 数据成员的隐藏是指在子类中重新定义一个与父类 中已定义的数据成员名完全相同的数据成员,即子 类拥有了两个相同名字的数据成员,一个是继承父 类的,另一个是自己定义的。


当子类引用这个通明的数据成员时,默认操作时他 自己定义的数据成员,父类那里继承来的数据成员 被隐藏。 当子类要操作继承自父类的同名数据成员时,可使 用关键字super引导。

继承与多态性 实验六实验报告(面向对象程序设计)

继承与多态性 实验六实验报告(面向对象程序设计)

大学实验报告年月日课程名称:面向对象程序设计实验名称:继承与多态性班级:姓名:同组人:无指导教师评定:签名:实验六运算符重载1、实验目的理解运算符重载(非成员形式和成员形式)、学习重载几类运算符(++,=,!=,+,-,==等)。

2、实验内容应用VC++6.0的构建一个复数类Complex,试对下列几个运算符进行重载:++,=,!=,+,-,==,其中要求要有成员重载形式和友元重载形式,而且,++运算符要求实现先加和后加两种形式。

该类定义原型说明:class complex{public:complex(double r=0,double i=0);complex &operator +(complex &c);complex operator -(complex &c);complex operator *(complex &c);friend complex operator /(complex &c1,complex &c2);friend int operator ==(complex &c1,complex &c2);friend int operator !=(complex &c1,complex &c2);//friend complex operator++(complex &c);//friend complex operator++(complex &c,int);complex operator++();complex operator++(int);complex operator=(complex &c);void disp();private:double real;double imag;};。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

类的继承性和多态性

类的继承性和多态性

实验三类的继承性和多态性【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与Eclipse6.0【实验目的】1. 掌握OOP方式进行程序设计的方法,2. 了解类的继承性和多态性的作用。

【实验要求】1. 编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序。

2. 编写体现类多态性(成员方法重载,构造方法重载)的程序。

【实验内容】一类的继承性练习1.进一步理解继承的含义新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。

新类还可添加新的变量和方法。

这种现象就称为类的继承。

当建立一个新类时,不必写出全部成员变量和成员方法。

只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。

被继承的类称为父类或超类(superclass),这个新类称为子类。

通常要对子类进行扩展,即添加新的属性和方法。

这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。

继承的意义就在于此。

2.创建公共类LX3_7_P(1)编写程序文件LX3_7_P.java,源代码如下。

public class LX3_7_P{protected String xm; //具有保护修饰符的成员变量protected int xh;void setdata(String m,int h) //设置数据的方法{xm =m;xh = h;}public void print() //输出数据的方法{System.out.println(xm+", "+xh);}}(2)编译LX3_7_P.java,产生类文件LX3_7_P.class。

(3)创建继承的类a 程序功能:通过LX3_7_P 类产生子类LX3_8,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。

在程序中调用了父类的print 方法,同时可以看出子类也具有该方法。

继承与多态实验报告心得

继承与多态实验报告心得

继承与多态实验报告心得
在进行继承与多态的实验过程中,我深刻理解了这两个面向对象编程的重要概念,并且在实践中体会到了它们的实际应用。

首先,继承是面向对象编程的一个基本特性,它允许创建新的类从已有的类中继承属性和方法。

在实验中,我创建了一个基类,然后通过继承来创建了多个子类。

这样,我可以在基类中定义一些通用的属性和方法,然后在子类中进行扩展或覆盖,实现了代码的重用和灵活性的提高。

通过继承,我可以很方便地创建出一个对象的不同类型的实例,从而满足不同的需求。

其次,多态是继承的一个重要特性,它允许使用基类类型的引用来引用一个子类的对象。

在实验中,我通过多态实现了一个统一的接口,使得可以以一种统一的方式处理不同类型的对象。

这样,我可以将具有相同行为的对象进行统一管理,提高了代码的灵活性和可扩展性。

在实验中,我还学会了使用抽象类和接口来实现多态。

抽象类提供了一种定义通用行为的方式,而接口则定义了一组方法的规范。

通过使用抽象类和接口,我可以定义一些通用的方法和属性,然后在具体的子类中进行实现和具体化。

这种方式可以有效地提高代码的可读性和可维护性。

继承与多态的实验为我提供了一个很好的学习机会,让我更深入地理解了面向对象编程的原理和思想。

通过实际操作,我不仅加深了对这两个概念的理解,还提升了自己的编程能力。

我相信,在以后的学习和工作中,我会继续运用这些知识,开发出更加高效和灵活的程序。

实验6 类的继承与多态

实验6 类的继承与多态

安徽机电职业技术学院实验报告一、实验目的1、进一步掌握类的定义与使用;2、掌握类的继承,以及访问属性public, private和protected的用法;3、了解类的多态性;4、掌握使用类来构造应用程序。

二、实验内容使用Visual Studio .NET 2005,在Point-Circle-Cylinder示例程序中,添加一个圆锥体类(Cone),该类派生自圆类(Circle),并具有以下属性:高度(Height),以及以下方法:Area (求圆锥体的表面积)、Volumn(求圆锥体的体积)三、实验步骤1、将服务器上“面向对象”课件的文件夹中的“Csharp示例\第7课\ Exercise”文件夹复制到本地磁盘上。

打开其中的“Exercise.sln”,完成其中的3个任务。

这3个任务目标写在Form1.cs文件中,需要在项目中添加2个类(圆类Circle, 圆锥体Cone)的定义。

2、将完成的源程序压缩后,连同本实验报告,一同通过电子邮件交给指导教师。

四、程序运行结果截图程序运行后单击"Circle类测试"按钮后的运行结果截图:程序运行后单击"Cone类测试"按钮后的运行结果截图:程序运行后单击"多态性测试"按钮后的运行结果截图:五、程序源代码(用Winrar压缩后用附件提交,源代码中要有比较完备的注释),以下代码请粘贴于此:Circle类的代码:class Circle:Point{private double radius;public double Radius{get{return radius;}set{radius = value;}}public Circle(){this.X = 0;this.Y= 0;this.radius = 0;}public Circle( int X, int Y,double radius):base(X,Y){this.X = X;this.Y = Y;this.radius = radius;}public override double Area(){return Math.Round(Math.PI * Math.Pow(this.radius,2),2);}public double zhouchang(){return 2 * Math.PI * radius;}public override string Name{get{return"圆";}}public override string ToString(){return"圆心坐标="+ base.ToString() + ",半径=" + radius+"\r圆的周长="+Math.Round(this.zhouchang(),2);//return "圆心坐标=["+this.X+","+this.Y+"];半径="+ radius+"\n"+"圆的周长"+Math.Round(this.zhouchang())+"\n"+"圆的面积="+Math.Round(this.Areaes());}}任务1的代码:// TODO 1: 给本项目添加1个Circle类的定义,它继承自Point类Circle a = new Circle(5,5,5);string str=+":"+ a.ToString();Output(str);Cone类的代码:class Cone:Circle{private double Height;private double height{get{return Height;}set{Height = value;}}public Cone(){this.Height = 0;this.X = 0;this.Y = 0;}public Cone(int X, int Y, double radius, double Height):base(X,Y,radius) {this.X = X;this.Y = Y;this.Height = Height;this.Radius = radius;}public double Areas(){return base.Area() + (this.zhouchang() * Height) / 2;}public override double Volume(){return Math.Round((base.Area() * Height) / 3,2);}public override string Name{get{return"圆锥";}}public override string ToString(){return"圆心坐标=[" + this.X + "," + this.Y + "];半径=" + this.Radius + "\n" + "圆锥的高=" +this.Height+"圆锥的表面积="+Math.Round(this.Areas(),2);}}任务2的代码:// TODO 2: 给本项目添加1个Cone类的定义,它继承自Circle类Cone b = new Cone(1, 2, 3,4);string strs = + ":" + b.ToString();Output(strs);六、思考题:1、请说明private、public、protected这3个访问修饰符的作用public成员,可以从程序的任何位置,通过该类(基类或派生类)的对象引用,来访问它。

实验6 继承和多态

实验6  继承和多态

继承和多态一、实验目的1、掌握类的继承机制;2、掌握子类对父类构造方法的调用;3、掌握方法覆盖和方法重载的区别。

二、实验内容1、定义点类Point、圆类Circle、圆柱体类Cylinder。

实现继承关系。

2、定义交通工具类Vehicle,一个小车类Car。

实现Car对Vehicle的继承。

三、实验步骤1、定义点类Point、圆类Circle、圆柱体类Cylinder。

实现继承关系。

设计一个表示二维平面上点的类Point,包括表示坐标位置的protected类型的成员变量x和y,获取和设置x和y值的public方法。

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

设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包括表示圆柱体高的protected 类型的成员h、获取和设置h的public方法、计算圆柱体表面积的public方法、计算圆柱体体积的public方法。

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

2、定义交通工具类Vehicle,一个小车类Car。

实现Car对Vehicle的继承。

已有一个交通工具类V ehicle,其中属性包括:速度speed、类别kind、颜色color;方法包括设置速度、设置类别、设置颜色、取得速度、取得类别、取得颜色。

设计一个小车类Car,继承自Vehicle,Car中增加了属性:座位数passenger,增加了设置和获取座位数的方法,创建Car的对象,为其设置各属性,并显示其状态(所有属性)。

四、实验记录与分析(可自拟或选择)1、要调用父类构造方法必须使用关键字super,并且这个调用必须在构造方法的第一行。

2、在子类中不能使用父类的构造方法的名字进行调用。

3、覆盖表现为父类与子类之间方法的多态性;重载表现为同一个类中方法的多态性。

继承与多态实验报告

继承与多态实验报告

继承与多态实验报告继承与多态实验报告在面向对象编程中,继承和多态是两个重要的概念。

通过继承,我们可以创建新的类,并从现有的类中继承属性和方法。

而多态则允许我们使用父类的引用来指向子类的对象,实现同一操作具有不同的行为。

本实验旨在通过实际的编程实践,加深对继承和多态的理解。

实验一:继承在这个实验中,我们创建了一个动物类(Animal),并从它派生出了两个子类:狗类(Dog)和猫类(Cat)。

动物类具有一些共同的属性和方法,如名字(name)和发出声音(makeSound)。

子类继承了父类的属性和方法,并可以添加自己的特定属性和方法。

在编写代码时,我们首先定义了动物类,并在其中实现了共同的属性和方法。

然后,我们创建了狗类和猫类,并分别在这两个类中添加了自己的特定属性和方法。

通过继承,我们可以在子类中直接使用父类的方法,并且可以根据需要进行重写。

实验二:多态在这个实验中,我们使用多态的概念来实现一个动物园的场景。

我们定义了一个动物园类(Zoo),并在其中创建了一个动物数组。

这个数组可以存储不同类型的动物对象,包括狗、猫等。

通过多态,我们可以使用动物类的引用来指向不同类型的动物对象。

例如,我们可以使用动物类的引用来指向狗对象,并调用狗类特有的方法。

这样,我们可以统一处理不同类型的动物对象,而不需要为每种类型编写特定的处理代码。

实验三:继承与多态的结合应用在这个实验中,我们进一步探索了继承和多态的结合应用。

我们定义了一个图形类(Shape),并从它派生出了三个子类:圆形类(Circle)、矩形类(Rectangle)和三角形类(Triangle)。

每个子类都实现了自己的特定属性和方法。

通过继承和多态,我们可以在图形类中定义一些通用的方法,如计算面积和周长。

然后,我们可以使用图形类的引用来指向不同类型的图形对象,并调用相应的方法。

这样,我们可以轻松地对不同类型的图形进行统一的处理。

结论:通过本次实验,我们进一步理解了继承和多态的概念,并学会了如何在编程中应用它们。

C++实验报告 继承与多态

C++实验报告 继承与多态
程序运行结果如图:
四、实验结果分析及总结(对实验的结果是否达到预得派生类中不曾定义过的成员,提高了编程效率; 2)继承与派生分为共有、私有、保护三种继承方式,其中共有使用最广泛,
它使得派生类与基类中的成员具有相同的属性。 3)多重继承存在有二义性,用虚基类能有效解决这一问题。 4)除了继承还有组合关系,及在一个类中定义另一个类的对象,此时初始化时要用对象名 来调用初始化函数。调用对应的函数时,要用对象名调用它的函数。 5)函数重载就是一名多用,可以使代码更容易被理解; 6)对于插入运算符与流提取运算符的重载格式: istream &operator >>(istream &, 自定义类 &); ostream &operator >>(ostream &,自定义类 &); 6)用一个指针调用派生类的函数时,将指针定义为指向基类的指针,基类的函数要定义为 虚函数,将各个派生类的地址赋值给指针,通过指针调用函数,实现多态性。
void Boss::print() { cout << id << '\t' << name << '\t' << age << '\t' << sex << '\t'<< "Boss" << "\t\t" << '$' << getPay() << " per " << salarySystem<< endl;
Boss(string name, int age, string id, string sex, string salarySystem = "year") : Person(name, age, id, sex, salarySystem) {}

继承与多态性

继承与多态性
学生实验报告
开课实验室:2011年4月16日
学院
年级、专业、班
姓名
学号
实验课程名称
面向对象程序设计
成绩
实验项目名称
继承与多态性
指导老师
一、实验目的
1、掌握继承、基类和派生类的概念。
2、掌握初始化基类成员的方法。
3、掌握派生类对基类的继承。
4、学习虚函数和纯虚函数的定义与使用方式。
5、理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。
定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。
定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。
7、编写一个人员信息管理系统。这个系统的功能是:交互式的实现校园人员信息的录入与显示。
分析:
{public:
virtual void action ( )
{cout«"保存文件"«endl;}
};
class item4: public Menu
{public:
virtual void action()
{cout«关闭文件"«endl;}
};
void main()
{int select;
Menu * Fptr[4];
int get_day()
{return m_day;}
};
class CLASS: public STUDENT
{protected:
int m_c,m_english;
public:
CLASS(){}
void set_c(int c)

面向对象程序设计多态性与继承性研究

面向对象程序设计多态性与继承性研究

面向对象程序设计多态性与继承性研究在面向对象程序设计中,多态性和继承性是两个非常重要的概念。

它们既有区别,又有联系,同时也是各自研究的热门内容。

一、多态性的研究多态性是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

也就是说,同一种方法可以被不同的子类实现,产生不同的运行结果。

这样的设计思想在程序设计中非常有用,可以让代码更加灵活,易于扩展和维护。

在Java和C++等语言中,多态性通过继承和接口实现。

继承是指一个类可以派生出许多子类,这些子类都是原类的特殊版本,拥有原类中的所有属性和方法,同时也可以新增加一些自己的属性和方法。

接口则是指一组方法的集合,没有任何默认实现,需要子类去实现。

多态性的研究主要集中在以下几个方面:1、方法重载和方法重写的区别方法重载是指在同一个类中定义多个同名的方法,但是它们的参数列表不同。

方法重写则是指在子类中重写父类的某个方法,实现自己的版本。

两者的区别在于:方法重载在同一个类中进行定义,而方法重写则是在子类中实现的。

2、动态绑定的实现原理动态绑定是指代码在执行的时候,根据实际的类型来执行相应的方法。

它可以实现不同类的对象调用相同的方法,产生不同的结果。

动态绑定的实现原理是依靠虚函数表和虚函数指针来完成的。

3、多态性的应用举例多态性的应用非常广泛,比如在GUI的程序设计中,可以通过多态性实现不同的控件的事件处理。

在游戏设计中,可以通过多态性实现不同的游戏角色的动作等。

二、继承性的研究继承是指一个类可以派生出许多子类,这些子类都是原类的特殊版本,拥有原类中的所有属性和方法,同时也可以新增加一些自己的属性和方法。

继承的目的是为了简化代码,实现代码的重用和扩展。

在Java和C++等语言中,继承分为单继承和多继承两种。

单继承是指一个类只能继承一个父类,而多继承则是指一个类可以继承多个父类,但是会出现一些冲突和歧义问题。

继承性的研究主要集中在以下几个方面:1、多层继承的问题多层继承是指一个类可以继承另一个类的子类,这样的继承关系可以一直延伸下去。

实验报告5 继承与多态

实验报告5 继承与多态

实验名称:继承与多态一.实验目的:((1)理解继承的含义,掌握派生类的定义方法和实现;(2)理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。

(3)编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序;(4)编写体现类多态性(成员方法重载,构造方法重载)的程序。

(5)理解接口和抽象类、抽象方法的定义和实现方法;(5)理解接口和抽象类的差别。

二.上机内容:(1)进行类的继承和基类构造方法的应用的练习;(2)进行类的多态性练习(3)进行抽象类和接口的练习(4)整理上机步骤,总结经验和体会。

(5)完成实验报告。

三.上机步骤:类的继承和基类构造方法的应用(1)编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。

要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。

using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication2{class person{public string bh;//编号public string xm;//姓名public person(string bh, string xm){this.bh = bh;this.xm = xm;}public void show(){Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);}}class student : person{public string bj;//班级public int cj;//成绩public student(string sbh, string sxm, string sbj, int scj): base(sbh, sxm){bh = sbh;xm = sxm;bj = sbj;cj = scj;}public new void show(){Console.WriteLine("***student***");Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);Console.WriteLine("班级:{0}", bj);Console.WriteLine("成绩:{0}", cj);}}class teacher : person{public string zc;//职称public string bm;//部门public teacher(string tbh, string txm, string tzc, string tbm) : base(tbh, txm){bh = tbh;xm = txm;zc = tzc;bm = tbm;}public new void show(){Console.WriteLine("***teacher***");Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);Console.WriteLine("职称:{0}", zc);Console.WriteLine("部门:{0}", bm);}}class program{static void Main(string[] args){student st = new student("050013", "张三", "信管091", 91);st.show();teacher te = new teacher("046950", "范仲淹", "特级教师", "教务处"); te.show();Console.ReadLine();}}}运行结果:(2)将以上程序尝试改成通过调用基类构造方法的方式来初始化编号和姓名,并总结调用基类构造方法的应用要点。

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

湖北工业大学工程技术学院实验报告课程名称:面向对象程序设计实验内容:实验六继承性与多态性学院:工程技术学院专业班级:姓名:学号:指导教师:实验日期:实验地点:一、实验目的1、1、了解多态性的概念。

2、2、了解虚函数的作用及使用方法。

3、3、了解纯虚函数和抽象类的概念和用法。

二、实验步骤1.设计一个类层次,其中的基类为Date,它拥有一个相关数据成员及一个虚函数print,从Date类派生ShortE、MediumDate和LongDate类,Date的print 函数使用日期格式:11-26-2015,ShortE的print函数使用日期格式:26-11-2015MediumDate的print函数使用日期格式:Nov.26,2015LongDate的print函数使用日期格式:November 26, 2015编写一个程序来测试各个类的print函数。

#include<iostream>using namespace std;class Date{protected:int year,month,day;public:Date(int y,int m,int d){year=y;month=m;day=d;}virtual void print(){cout<<month<<"-"<<day<<"-"<<year<<endl;}};class ShortE:public Date{public:ShortE(int y,int m,int d):Date(y,m,d){} void print(){cout<<day<<"-"<<month<<"-"<<year<<endl;}};class MediumDate:public Date{public:MediumDate(int y,int m,int d):Date(y,m,d){} void print(){switch(month){case 1:cout<<"Jap.";break;case 2:cout<<"Feb.";break;case 3:cout<<"Mar.";break;case 4:cout<<"Apr.";break;case 5:cout<<"May.";break;case 6:cout<<"Jun.";break;case 7:cout<<"Jul.";break;case 8:cout<<"Aug.";break;case 9:cout<<"Sep.";break;case 10:cout<<"Oct.";break;case 11:cout<<"Nov.";break;case 12:cout<<"Dec.";break;default:cout<<"error";}cout<<day<<","<<year<<endl;}};class LongDate:public Date{public:LongDate(int y,int m,int d):Date(y,m,d){} void print(){switch(month){case 1:cout<<"January.";break;case 2:cout<<"February.";break;case 3:cout<<"March.";break;case 4:cout<<"April.";break;case 5:cout<<"May.";break;case 6:cout<<"June.";break;case 7:cout<<"July.";break;case 8:cout<<"August.";break;case 9:cout<<"September.";break;case 10:cout<<"October.";break;case 11:cout<<"November.";break;case 12:cout<<"December.";break;default:cout<<"error";}cout<<day<<","<<year<<endl;}};void main(){Date d1(2015,11,26),*d;ShortE d2(2015,11,26);MediumDate d3(2015,11,26);LongDate d4(2015,11,26);d=&d1;d->print();d=&d2;d->print();d=&d3;d->print();d=&d4;d->print();}写出实验步骤、调试记录和实验结果:2、定义一个抽象类CShape,包含纯虚函数Area()(用来计算面积)。

然后派生出三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积。

各形状的数据由构造函数来设置。

并在主函数中求出各形状的面积之和。

编写一个完整的程序。

#include<iostream.h>#include<math.h>class CShape{public:virtual float Area()=0;};class CTriangle:public CShape{private:float a,b,c;public:float Area(){float t=(a+b+c)/2.0;return sqrt((t-a)*(t-b)*(t-c));}CTriangle(float x,float y,float z){a=x;b=y;c=z;}};class CRect:public CShape{private:float l,h;public:float Area(){return l*h;}CRect(float x,float y){l=x;h=y;}};class CCircle:public CShape{private:float r;public:float Area(){return 3.14*r*r;}CCircle(float x){r=x;}};void main(){float sum=0;CShape*p;p=new CTriangle(16,20,12);sum+=p->Area();p=new CRect(8,9);sum+=p->Area();p=new CCircle(5);sum+=p->Area();cout<<"总面积:"<<sum<<endl;}写出实验步骤、调试记录和实验结果:三、分析与总结(每个步骤10分)1、总结实验所验证的知识点。

1.虚函数的使用方法是:在基类用virtual 声明成员函数为虚函数。

这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。

在类外定义虚函数时,不必再加virtual。

2.带有纯虚函数的类称为抽象类: class 类名{ virtual 类型函数名(参数表)=0; //纯虚函数 ... } 纯虚函数纯虚函数没有函数体;最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”; 这是一个声明语句,最后应有分号。

2、写出实验后的学习体会。

这次实验,我们认识了多态性的概念,了解了虚函数的作用及使用方法,同时也知道了纯虚函数和抽象类的概念和用法四、教师评阅意见签名:日期:。

相关文档
最新文档