实验报告3 继承与多态

合集下载

实验三 继承和多态

实验三 继承和多态

实验三继承和多态一、实验目的1.熟练掌握封装性,多态性的概念。

2.熟练掌握抽象类abstract的概念。

3.熟练掌握接口interface的概念。

4.熟练包package的概念以及编译运行的方法。

二、实验内容1.编写一个Java Application程序,该程序有个点Point类,它包含横坐标x和纵坐标y 两个属性,再给Point定义两个构造方法和一个打印点坐标的方法Show。

定义一个圆Circle 类,它继承Point类(它是一个点,圆心(Center)),除此之外,还有属性半径Radius,再给圆定义2个构造方法、一个打印圆的面积的方法PrintArea和一个打印圆中心、半径的方法Show(其中显示圆心可以用super.Show()的方式)。

package实验三;public class Point {double x,y;public Point(){x=0;y=0;}public Point(double x,double y){this.x=x;this.y=y;}public String Show(){return"横坐标为:"+this.x+",纵坐标为:"+this.y;}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubPoint a=new Point(3.0,4.0);System.out.println(a.Show());}}package实验三;public class Circle extends Point {double Radius;public Circle(){super(0,0);Radius=0;}public Circle(double x,double y,double z){super(x,y);Radius=z;}public String Show(){System.out.println("圆心的"+super.Show()+"半径为:"+Radius);return"圆心的"+super.Show()+"半径为:"+Radius;}public String PrintArea(){System.out.println("圆的面积为:"+Math.PI*Radius*Radius);return"圆的面积为:"+Math.PI*Radius*Radius;}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubCircle a=new Circle(3,4,5);a.Show();a.PrintArea();}}2.编写一测试类,对其进行编译、运行。

实验报告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)将以上程序尝试改成通过调用基类构造方法的方式来初始化编号和姓名,并总结调用基类构造方法的应用要点。

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. 通过实验加深对多态编程的理解和应用。

二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 多态的基本概念2. 多态的实现方法3. 多态的应用实例四、实验步骤1. 多态的基本概念多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

在Java中,多态主要通过继承和重写方法来实现。

2. 多态的实现方法(1)继承在Java中,通过继承可以实现多态。

子类继承父类的方法和属性,可以重写父类的方法,使得子类的方法具有多态性。

(2)重写方法重写方法是指在子类中重写父类的方法,使得子类的方法具有多态性。

重写方法必须满足以下条件:- 方法名、返回类型、参数列表与父类方法相同;- 子类和父类之间必须存在继承关系。

(3)方法重载方法重载是指在同一个类中,存在多个同名方法,但参数列表不同。

方法重载可以实现多态,因为根据传入的参数列表,可以调用不同的方法。

3. 多态的应用实例下面通过一个简单的例子来展示多态的应用。

(1)创建一个动物类```javapublic class Animal {public void makeSound() {System.out.println("Animal makes a sound");}}```(2)创建两个子类,分别代表狗和猫```javapublic class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog barks");}}public class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows");}}```(3)创建一个方法,接受一个Animal类型的参数,并调用其makeSound方法```javapublic class Test {public static void main(String[] args) {Animal dog = new Dog();Animal cat = new Cat();makeSound(dog);makeSound(cat);}public static void makeSound(Animal animal) {animal.makeSound();}}```输出结果:```Dog barksCat meows```通过上面的例子,我们可以看到,尽管我们传递的是Animal类型的参数,但在调用makeSound方法时,会根据实际对象的类型调用相应的方法,实现了多态。

实验三 继承和多态

实验三 继承和多态

实验三继承和多态一、实验目的1.熟练掌握封装性,多态性的概念。

2.熟练掌握抽象类abstract的概念。

3.熟练掌握接口interface的概念。

4.熟练包package的概念以及编译运行的方法。

二、实验内容1.编写一个Java Application程序,该程序有个点Point类,它包含横坐标x和纵坐标y 两个属性,再给Point定义两个构造方法和一个打印点坐标的方法Show。

定义一个圆Circle 类,它继承Point类(它是一个点,圆心(Center)),除此之外,还有属性半径Radius,再给圆定义2个构造方法、一个打印圆的面积的方法PrintArea和一个打印圆中心、半径的方法Show(其中显示圆心可以用super.Show()的方式)。

编写一测试类,对其进行编译、运行。

结果如何?如去掉语句“super.Show();”,再看看运行结果。

理解程序中重载和多态性的运用。

2.完成以下步骤要求:(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对象,输出其轴心位置坐标、半径、高及其体积的值。

3.学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的管理和对教师的管理在他们身上都有体现。

(1)设计两个信息管理接口StudentInterface和TeacherInterfaceo其中,StudentInterface接口包括setFee方法和getFee方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay方法和getPay方法,分别用于设置和获取教师的工资。

Java继承与多态实验报告

Java继承与多态实验报告

西安邮电大学(计算机学院)课内实验报告实验名称:继承与多态专业名称:计算机科学与技术班级:计科1405班学生姓名:高宏伟学号:04141152指导教师:刘霞林实验日期:2016.10.13一、实验目的通过编程和上机实验理解Java 语言的继承和多态特性,掌握变量的隐藏、方法的覆盖、重载,掌握抽象类和接口的使用。

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

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

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

4.编写使用接口的程序。

三、实验内容(一)类的继承1.创建公共类Student.(1)编写程序文件Student.java,源代码如下:public class Student{protected String name; //具有保护修饰符的成员变量protected int number;void setData(String m,int h) //设置数据的方法{name =m;number= h;}public void print() //输出数据的方法{System.out.println(name+", "+number);}}(2)编译Student.java,产生类文件Student.class。

2.创建继承的类Undergraduate(1)程序功能:通过Student 类产生子类undergraduate,其不仅具有父类的成员变量name(姓名)、number(学号),还定义了新成员变量academy(学院)、department (系)。

在程序中调用父类的print 方法。

(2)编写Undergraduate 程序:class Undergraduate extends Student{【代码1】//定义成员变量academy【代码2】//定义成员变量departmentpublic static void main(String args[]){【代码3】//创建一个学生对象s【代码4】//用父类的setData方法初始化对象s【代码5】//对象s调用print方法【代码6】//创建一个大学生对象u【代码7】//调用父类的成员方法setData初始化对象u【代码8】//设置对象u的成员变量academy【代码9】//设置对象u的成员变量departmentSystem.out.print(+", "+u.number+", "+u.academy+", "+u.department);}}(3)编译并运行程序注意:公共类Student 与undergraduate 类要在同一文件夹(路径)内。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验3、继承与多态初步

实验3、继承与多态初步

实验3、继承与多态初步1. 实验目的1). 进一步理解Java语言是如何体现面向对象编程基本思想。

2). 初步理解继承和派生的概念与使用。

3). 初步理解多态的概念与使用。

2.实验器材和实验环境:计算机,网络环境,投影设备。

实验相关软件:Window XP , Java软件开发工具包(JSDK)。

3*.预习及知识准备预习课本第5章内容.3.实验内容:1). 调试下面的程序,指出程序运行结果,并回答下列问题在shyan.java文件中定义两个类。

一个是CCircle,另一个是主类shyan。

class CCircle{ double pi;double radius;double getRadius(){ return radius;}void setCircle(double r, double p){ pi=p;radius=r;}double getCircleArea(){ return pi*radius*radius;}}public class shyan{ public static void main(String args[]){ CCircle cir1=new CCircle();cir1.setCircle(2.0,3.1416);System.out.println("园半径="+cir1.getRadius());System.out.println("园面积="+cir1.getCircleArea());cir1.pi=3.14159;cir1.radius=10.0;System.out.println("园半径="+cir1.getRadius());System.out.println("园面积="+cir1.getCircleArea());}}【回答下列问题】①试述程序中两个类的各自作用。

接口的应用实验报告(3篇)

接口的应用实验报告(3篇)

第1篇一、实验目的1. 理解接口的概念和作用。

2. 掌握接口的使用方法,包括接口的定义、实现和继承。

3. 通过实际应用,加深对接口的理解和应用能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 接口的基本概念2. 接口的定义和实现3. 接口的继承和多态4. 接口的应用实例四、实验步骤1. 接口的基本概念(1)打开Eclipse,创建一个名为“InterfaceDemo”的Java项目。

(2)在项目中创建一个名为“Shape”的接口,包含一个抽象方法“draw()”。

```javapublic interface Shape {void draw();}```2. 接口的定义和实现(1)在项目中创建一个名为“Circle”的类,实现“Shape”接口。

```javapublic class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle.");}}```(2)在项目中创建一个名为“Rectangle”的类,实现“Shape”接口。

```javapublic class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle.");}}```3. 接口的继承和多态(1)在项目中创建一个名为“Triangle”的类,继承“Circle”类,并实现“Shape”接口。

```javapublic class Triangle extends Circle implements Shape {public void draw() {System.out.println("Drawing a triangle.");}}```(2)创建一个名为“Main”的类,用于测试接口的应用。

Java实验报告(四)继承和多态

Java实验报告(四)继承和多态
}
int index=BinarySearch(shape1,shape3);
System.out.println("\n【二分法查找】:");
if(index==0){
System.out.println("【对象】"+shape3.toString()+"不存在【圆形】数组中。");
}
else{
Shape[] shape2={new Rectangle(1.0,4.0),new Rectangle(7.0,3.0),new Rectangle(3.0,5.0),
new Rectangle(9.0,5.0),new Rectangle(5.0,4.0)};
Shape shape3=new Circle(2.0);
}
public double getRadius(){
return radius;
}
public void setRadius(double val){
this.radius=val;
}
public double getArea(){
return Math.PI*radius*radius;
}
public double getPerimeter(){
}
else{
return -1;
}
}
public int compareTo(Object o) {
if(this.getArea()>((Circle)o).getArea())
return 1;
else if(this.getArea()==((Circle)o).getArea())

实验三,类的继承与多态

实验三,类的继承与多态

1.加减乘除四则运算public abstract class Father { //抽象类public abstract double suan(double a,double b);}public class Jia extends Father { //加法类public double suan( double a,double b) {return a+b;}}public class Jian extends Father { //减法类public double suan(double a,double b) {return a-b;}}public class Cheng extends Father { //乘法类public double suan(double a,double b) {return a*b;}}public class Chu extends Father { //除法类public double suan(double a,double b) {return a/b;}}import java.util.*; //主类public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner r=new Scanner(System.in);System.out.println("请输入要进行计算的实数a和b:");double a=r.nextDouble();double b=r.nextDouble();Father t=new Jia();System.out.println("a+b="+t.suan(a, b));t=new Jian();System.out.println("a-b="+t.suan(a, b));t=new Cheng();System.out.println("a*b="+t.suan(a, b));t=new Chu();System.out.println("a/b="+t.suan(a, b));}}2.计算分数public abstract class ComputerAverage {double s[],sum;public abstract double avra(int n);}public class Gymnastics extends ComputerAverage {double min,max;public double avra(int n) {max=min=s[0];for(int i=1;i<n;i++){if(min>s[i]) min=s[i];if(max<s[i]) max=s[i];}double av=(sum-min-max)/(n-2);return av;}}public class School extends ComputerAverage {public double avra(int n) {return sum/n;}}import java.util.*;public class Main {public static void main(String[] args) {ComputerAverage c=new Gymnastics();ComputerAverage d=new School();Scanner r=new Scanner(System.in);System.out.println("请输入的分数的个数为:");int n=r.nextInt();c.s=new double [n];d.s=new double [n];System.out.println("请输入"+n+"个分数:");for(int i=0;i<n;i++){c.s[i]=r.nextDouble();d.s[i]=c.s[i];c.sum=c.sum+c.s[i];d.sum=d.sum+d.s[i];}r.close();System.out.println("Gymnastics方法的平均数为:"+c.avra(n));System.out.println("School方法的平均数为:"+d.avra(n));}}3.求圆,正方形,三角形的面积interface Jiekou {public abstract double Area();}class Circle implements Jiekou {double r;Circle(){}Circle(double a){r=a;}public double Area(){return 3.14*r*r;}}class Square implements Jiekou{double a;Square (){}Square(double a){this.a=a;}public double Area(){return a*a;}}class Triangle implements Jiekou {double c,h;Triangle(){}Triangle(double a,double b){c=a;h=b;}public double Area(){return c*h/2;}}import java.util.*;public class Main {public static void main(String[] args) {Jiekou a[]=new Jiekou[3];Scanner read=new Scanner (System.in);System.out.println("圆的半径为:");double r=read.nextDouble();a[0]=new Circle(r);System.out.println("圆的面积为:"+a[0].Area());System.out.println("正方形的边长为:");double b=read.nextDouble();a[1]=new Square(b);System.out.println("正方形的面积为:"+a[1].Area());System.out.println("三角形的底边和高为:");double d=read.nextDouble();double h=read.nextDouble();a[2]=new Triangle (d,h);System.out.println("三角形的面积为:"+a[2].Area());}}4.查询课程interface Jiekou {public abstract void query_course_catalog(Student a[],int n);}import java.util.*;class Student implements Jiekou {String ID,name,birthData,specialty,course,Sex;Student(){}Student(String ID,String name,String Sex,String birthData,String specialty,String course ){ this.birthData=birthData; this.ID=ID;this.Sex=Sex;=name; this.specialty=specialty; this.course=course;}public void query_course_catalog(Student a[],int n){System.out.println("请输入要查找的学生的学号:");Scanner r=new Scanner(System.in);String s=r.next();int flag=0;for(int i=0;i<n;i++) {if(a[i].ID.equals(s)){System.out.println("该学生的所选课程为:"+a[i].course);flag=1;break;}}System.out.println(s);if(flag==0){System.out.println("未找到该学生所选的课程");}}}import java.util.*;public class Main {public static void main(String[] args) {Student a[];System.out.println("录入信息");System.out.println("请问要录入的学生信息的个数为:");Scanner r=new Scanner(System.in);int n=r.nextInt();a=new Student[n];System.out.println("请依次输入"+n+"个学生的学号,姓名,性别(f/m),生日,专业,课程:");String xue,name,b,spe,cou, sex;for(int i=0;i<n;i++){ System.out.println("第"+(i+1)+"个学生的信息:");xue=r.next();name=r.next();sex=r.next();b=r.next();spe=r.next();cou=r.next();a[i]=new Student(xue,name,sex,b,spe,cou);}a[0].query_course_catalog(a,n);}}。

继承与多态实验报告

继承与多态实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验3 继承性和多态性

实验3 继承性和多态性

试一试:使用派生类
现在,让我们在示例中看一下派生类的工作过程。将下面的代码添加到 Ex9_01 项目中,将其保存为名为 Ex9_01.cpp 的 源文件:
1.
// Ex9_01.cpp
2.
// Using a derived class
3.
#include <iostream> // For stream I/O
实验 3 继承性和多态性
实验目的
1、 掌握继承方式; 2、 分辨基类与派生类; 3、 掌握继承中的构造函数和析构函数的工作方式; 4、 掌握多继承、虚拟继承; 5、 掌握多态性; 6、 抽象类的应用。
实验性质
验证、设计性实验,必做,3 课时
实验内容
一、内容简介:
1 面向对象编程的基本思想 正如已经看到的那样,类是我们为适应特定应用程序的需求而定义的数据类型。面向对象编程中的类同时定义了与程序相 关的对象。我们的程序根据某个问题所特有的对象,使用可以直接处理这些对象的操作,从而成为该问题的解决方案。我们可 以定义一个类来表示某种抽象的事物,比如数学概念复数,或者卡车。因此,除了是数据类型之外,类还可以是现实世界中特 定种类的一组对象的定义,至少可以说是解决特定问题所需要的定义。 我们可以认为类定义了一组特定事物的特性,这些事物用一组公共的参数来表示,并且共用一组公共的、可以对它们进行 处理的操作。可以应用于特定类对象的操作由类接口定义,它们对应于类定义的 public 部分包含的函数。我们在上一章使用过 的 CBox 类是个很好的例子,它以箱子的尺寸和一组公有函数来定义箱子,这些函数可以应用于 CBox 对象以解决某个问题。 当然,现实世界中有许多不同种类的箱子:纸板箱、糖果盒和储粮箱。说出来的只是很少几个,我们肯定还能想到好多。 可以按照容纳的物品、材质或许多其他方式来区分这些箱子。虽然箱子的种类有许许多多,但它们都有某些共同的特性-- 比如 都是四方形的。因此,虽然有许多不同特征,但我们仍然可以将所有种类的箱子视为实际上来源相同。我们可以将某种箱子定 义成具有所有箱子的一般特性-- 可能只是长、宽和高,然后可以给基本的箱子类型添加一些其他特性,从而将特定种类的箱子 同其他箱子区别开来。我们还可能发现一些可以对特定种类的箱子执行、但不能对其他箱子执行的操作。 有些对象可能是特定种类的箱子与其他类型的对象合并得到的结果,比如糖果盒或啤酒箱。为适应这种情况,我们可以定 义一种一般的、具有四方形特性的箱子,然后定义另一种更加特殊化的箱子。图 9-1 举例说明了被定义的不同种类箱子之间的关 系。

【实验】实验报告类的重载继承和多态

【实验】实验报告类的重载继承和多态

【关键字】实验实验报告类的重载继承和多态篇一:实验三_类的重载继承和多态_()篇二:实验三_类的重载继承和多态篇三:C++实验报告(类和东西重载与继承多态和模板异常和流)C++实验报告目录C++实验报告 (4)实验一:类和东西 (4)1. (4)代码 (4)运行结果 (5)2 (5)思路: (5)代码 (5)运行结果 (8)3 (8)思路 (8)代码 (8)运行结果 (9)实验二重载和继承 (9)1 (9)思路 (10)代码 (10)运行结果 (13)问题分析: (13)2 (13)思路: (13)代码 (14)运行结果 (15)实验三多态与模板 (16)思路 (16)代码 (16)运行结果 (17)2 (17)思路 (17)代码 (18)运行结果 (19)3 (19)思路 (19)代码 (19)运行结果 (21)问题及分析 (21)实验四异常和流 (21)1 (21)思路 (21)代码 (21)运行结果 (22)2 (23)思路 (23)代码 (23)运行结果 (27)实验总结: (28)C++实验报告实验一:类和东西实验目的:能够根据软件需要,对客观实体进行抽象(封装)和代码实现。

实验环境:Visual C++ 6.0实验内容:1.设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。

代码如下:#includeusing namespace std;struct point{float x;};class Rectangle//矩形类{point lowerleft;//矩形左下角点的坐标point upperright;//矩形右上角点的坐标public:void get();//输入矩形左下角点和右上角点的坐标float area();//计算矩形面积};void Rectangle::get(){cout cout实验报告类的重载继承和多态) cin>>lowerleft.x>>lowerleft.y;cout cin>>upperright.x>>upperright.y;}float Rectangle::area(){return (upperright.x-lowerleft.x)*(upperright.y-lowerleft.y);}int main(){Rectangle juxing;juxing.get();float result;result=juxing.area();cout return 0;}运行结果如下:2. 设计并测试一个“人员”类。

实验报告3 继承与多态

实验报告3 继承与多态
年度第一学期
系别:数学与计算机科学学院
实验课程
C++面向对象程序设计
班级
级计算机科学与技术
学号
11
姓名
蔡兴明
指导教师
马学梅
实验题目
继承与多态(一)
日期
2012-9-29
实验目的
及要求
1、理解继承在面向对象程序中的重要作用、继承和派生的概念;
2、掌握通过继承派生一个新类的方法;
return *this;
}
int main ( )
{
COMPLEX c1(1,2) ;
COMPLEX c2(2) ;
COMPLEX c3(c1) ;
c3.print ( );
c2.add(c1);
c3. subs(c2);
c3.print( );
return 0;
}
给出输出结果,分析this的用途.在此程序的基础上实现运算符”+”和”-“的重载
COMPLEX (double r=0,double i=0);
COMPLEX(const COMPLEX & other);
void print( );
COMPLEX add(const COMPLEX & other);
COMPLEX subs(const COMPLEX & other);
protected:
(2)运算符重载:以下程序要求实现运算符++的前置和后置重载,但实际上并没有实现。试分析原因,并作出修改,以实现此功能。
#include <iostream.h>
class OperClass
{ int x;

3 实验三 类的继承及多态

3 实验三 类的继承及多态
}
public void printA2(){
System.out.println("HelloChina!");
}
public void printB(){
System.out.println("Hello "+NAME);
}
}
public class InterfaceExtendsDemo{
public static void main(String args[]){
【源代码】
class Person{
public String name="张三";
}
class Student extends Person{
public String name="张童";
public void print(){
System.out.println("父类中属性: "+);
}
class X implements A,B{
public void printA1(){
System.out.println("Hello World!");
}
public void printA2(){
System.out.println("HelloChina!");
}
public void printB(){
要求:在重写的方法的方法体中需要调用被隐藏的方法返回a和b的最大公约数m,然后将(a*b/m)返回;在应用的程序的主类中分别使用父类和子类创建对象,并分别调用方法f()计算两个正整数的最大公约数和最小公倍数。
4编写一个圆锥类,能够计算圆锥的体积,要求圆锥类的构造函数中有一参数是圆类的一个对象。

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) {}

实验8_继承和多态

实验8_继承和多态

实验08:继承与多态实验学时:6实验类型:验证、设计实验要求:必修一、实验目的1.理解继承的概念,了解面向对象设计中继承和多态的合理性;2.掌握派生类的构造与析构;3.掌握在对象中使用类层次和继承思想进行设计、实现和测试;4.区别运行时的多态性的实现,理解重载与同名覆盖的差异;5.理解虚函数与多态性;6.实现运行时多态性的程序设计。

二、实验内容1.Difine a class called PartFileledArrayWMax that is a derived class of the class PartFilledArray. The class PartFilledArrayWMax has one additional member variable named max_value that holds the maximum value stored in the array. Define a member accessor function named get_max that returns the maximum value stored in the array. Redefine the member function add_value and define two constructors, one of which has an int argument for the maximum number of entries in the array. Also define a copy constructor, an overloaded assignment operator, and a destructor. (A real class would have more member functions, but these will do for an exercise.)2.某公司雇员(employee)包括经理(Manager)、技术人员(Technician)和销售员(Saleman)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
};
class Crectangle: public Cshape
{
public:
void virtual Display( void)
{
cout<<"Crectangle"<<endl;
}
};
class Ctriangle: public Cshape
{
void virtual Display( void)
3、理解多态的概念、运算符重载的概念、虚函数的作用;
4、学习实现多态,掌握几种常用运算符的重载;;
5、掌握虚函数的定义和使用方法;
6、简单面向对象程序的编写
实验内容及具体步骤:
内容1:函数重载
(1)构造函数重载,运行以下程序,
#include <iostream.h>
class COMPLEX
{ public:
1.Chin a china
2.National Computer
3.Examination Rank
4.swust swust
#include<string.h>
class CString
{
public:
friend int main();
CString();
CString(CString &s);
void display();
~CString();
private:
char *str;
};
CString::CString()
{
str=NULL;
}
CString::CString(CString &s)
{
str=new char[strlen(s.str)+1];
if(str!=NULL)
{
strcpy(str,s.str);
this是自身的地址,但是*this就是自身了.是按值回返了.如果函数的回返值是带有&号的,那么回返值就是引用了
构造出五个公共类函数,此函数在运行时没有出现问题,但是我经过仔细阅读理解程序的过程中,主要对这个this的用途和用法在网上查阅学习了下,一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n(不能写成n = n)。
{OperClass A; x ++; A.x=x; return A;}
void OperClass::display ( )
{ cout <<“x=“<<x<<endl; }
void main ( )
{
OperClass X,Y ;
X.display( );
++X;
Y=++X;
Y++.display( );
CString(char *s);
friend bool operator >(CString s1,CString s2);
friend bool operator <(CString s1,CString s2);
friend bool operator ==(CString s1,CString s2);
cout<<"color="<<d.getColor( )<<endl;
}
此程序中父类Mammal有两个私有类变量,三个公共类函数,Dog类是Mammal类的子类,从而调用子类实现了函数的继承;此程序代码在运行的过程中没有遇到任何的错误;从函数中我更深的了解到继承的概念以及如何使用,继承是存在于面向对象程序设计中的两个类之间的一种关系,是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,充分利用已有的类来完成更复杂、更深入的开发。
计算机课程实验报告
2012—2013学年度第一学期
系别:数学与计算机科学学院
实验课程
C++面向对象程序设计
班级
级计算机科学与技术
学号
11
姓名
蔡兴明
指导教师
马学梅
实验题目
继承与多态(一)
日期
2012-9-29
实验目的
及要求
1、理解继承在面向对象程序中的重要作用、继承和派生的概念;
2、掌握通过继承派生一个新类的方法;
(2)运算符重载:以下程序要求实现运算符++的前置和后置重载,但实际上并没有实现。试分析原因,并作出修改,以实现此功能。
#include <iostream.h>
class OperClass
{ int x;
public:
OperClass( );
OperClass operator ++( );
OperClass operator ++(int );
return *this;
}
int main ( )
{
COMPLEX c1(1,2) ;
COMPLEX c2(2) ;
COMPLEX c3(c1) ;
c3.print ( );
c2.add(c1);
c3. subs(c2);
c3.print( );
return 0;
}
给出输出结果,分析this的用途.在此程序的基础上实现运算符”+”和”-“的重载
double real, image;
};
COMPLEX:: COMPLEX ( double r, double i)
{ real = r; image =i; return; }
COMPLEX:: COMPLEX( const COMPLEX & other )
{ real = other.real; image =other.image; return;}
{
if(strcmp(s1.str,s2.str)==0)
return true;
else
return false;
}
int main()
{
void Update1(CString &s1,CString &s2);
CString s1("Chin a"),s2("National"),s3("Examination");
{
this->age=age;
this->weight=weight;
}
int Mammal::getAge( )
{
return age;
}
int Mammal::getWeight( )
{
return weight;
}
class Dog : public Mammal //class Dog is a derived class of Mammal
COMPLEX (double r=0,double i=0);
COMPLEX(const COMPLEX & other);
void print( );
COMPLEX add(const COMPLEX & other);
COMPLEX subs(const COMPLEX & other);
protected:
}
内容2:重载<,>,==:
设计字符串类String,用来存放不定长的字符串,重载运算符“==”,“>”,“<”,用于两个字符串的大于、小于和等于的比较运算。
提示:(1)属于双目运算符,在重载双目运算符时,函数中应该有两个参数。
(2)String类成员变量应为字符型指针;
(3)多个构造函数的定义;
测试数据:
{
cout<<"Ctiangle"<<endl;
}
};
class Cellipse :public Cshape
{
public: void virtual Display(void)
{
cout<<"Cellipse"<<endl;
}
};
void main()
{
Cshape obshape;
Cellipse obEllipse;
{
hairColor=color;
}
int Dog::getColor( )
{
return hairColor;
}
void main( )
{
Dog d(8, 20, 1);
cout<<"age="<<d.getAge( )<<endl;
cout<<"weight="<<d.getWeight( )<<endl;
}
}
CString::CString(char *s)
{
str=new char[strlen(s)+1];
if(str!=NULL)
{
strcpy(str,s);
}
}
bool operator >(CString s1,CString s2)
{
if(strcmp(s1.str,s2.str)>0)
}
else
{
cout<<"s1等于s2";
cout<<endl;
相关文档
最新文档