继承与多态实验报告

合集下载

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

二、实验环境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.什么是多态3.多态在Java中的技术基础4.示例5.多态的好处6.总结介绍之前的文章介绍过类的封装性和继承性,现在是时候聊聊面向对象编程的三大特性之一的最后一个类的多态性了。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验三 继承和多态

实验三 继承和多态

实验三继承和多态一、实验目的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方法,分别用于设置和获取教师的工资。

实验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程序设计》上机实验报告 实验三 面向对象程序设计的继承、多态等特性的练习

《Java程序设计》上机实验报告 实验三   面向对象程序设计的继承、多态等特性的练习

信息科学与工程学院《Java程序设计》上机实验报告专业班级姓名学号实验时间指导教师成绩主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)Student(String name,String sex,int age,String sno,String classno) {super(name,sex,age);this.sno=sno;this.classno=classno;}public String toString(){ return("姓名:"+name+" 性别:"+sex +" 年龄:"+age+ " 学号:"+sno+" 班号:"+classno+" ");}}public class TestStudentPerson {public static void main(String[] args){int i;Student stu[]=new Student[3];stu[1]=new Student("小明","男",20,"200912135138","2班");stu[2]=new Student("小木","女",23,"200912135136","5班");stu [1].updateAge(25);stu [2].updateAge(26);for(i=1;i<3;i++){System.out.println(stu[i]);}}}2)调试结果:主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)调试结果:2)将Shape类定义为abstact class Shape{……}public class TestVirtualInvoke {static void doStuff(Shape s){s.draw();}public static void main(String[] args) {Circle c=new Circle();Triangle t=new Triangle();Line l=new Line();doStuff(c); //作为实参,调用对象是3个类对象,上溯造型使其隐藏.doStuff(t);doStuff(l);}}abstract class Shape{abstract void draw();}class Circle extends Shape{void draw(){System.out.println("Draw Circle");}} //定义Shape抽象类的派生类Circleclass Triangle extends Shape{void draw(){System.out.println("Draw Three Triangle");}}//定义Shape抽象类的派生类Triangleclass Line extends Shape{void draw(){System.out.println("Draw Line");}}//定义Shape抽象类的派生类Line主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)调试结果:3)将Shape定义为interface Shape{……}public class TestVirtualInvoke {static void doStuff(Shape s){s.draw();}public static void main(String[] args) {Circle c=new Circle();Triangle t=new Triangle();Line l=new Line();doStuff(c); //作为实参,调用对象是3个类对象,上溯造型使其隐藏.doStuff(t);doStuff(l);}}interface Shape{public void draw();} //定义一个Shape接口class Circle implements Shape{public void draw(){System.out.println("Draw Circle");}} //基于Shape接口利用implements实现类Circleclass Triangle implements Shape{public void draw(){System.out.println("Draw Three Triangle");}}class Line implements Shape{public void draw(){System.out.println("Draw Line");}}调试结果:3.思考题:某小型公司,主要有三类人员:经理、兼职技术人员和兼职推销员。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Java实验报告

Java实验报告

实验报告课程名称 Java技术专业班级 13-计算机科学与技术-1班学生姓名及学号 98 潘汀指导教师钟华刚实验地点计算中心2015 ~ 2016 学年第一学期实验一类的封装、继承、多态一、实验目的1.复习、理解OOP的特征——封装、继承和多态。

2.学会使用Java编写简单的类。

理解类的属性和方法。

3.掌握关键字private, protected, public的作用。

4.掌握多态的概念。

二、实验内容1.分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求:(1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化。

(2) Point2D有一个void型成员方法offset(int a, int b),它可以实现Point2D的平移。

(3) Point3D是Point2D的直接子类,它有有三个整型成员变量x,y,z (分别为三维空间的X,Y,Z方向坐标),Point3D有两个构造方法:Point3D(int x,int y,int z)和Point3D(Point2D p,int z),两者均可实现对Point3D的成员变量x, y,z的初始化。

(4) Point3D有一个void型成员方法offset(int a, int b,int c),该方法可以实现Point3D的平移。

(5)在Point3D中的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point3D的对象p3d1,p3d2,打印出他们之间的距离。

提示:方法2.创建一个数组,随机生成Point2D或者Point3D的对象放于其中。

最后依次调用数组中每个对象的“打印方法”,显示数组中存储的对象是什么。

提示:方法或者类三、实验代码四、思考题1.你对面向对象的理解。

继承与多态实验报告心得

继承与多态实验报告心得

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

JAVA实验四1

JAVA实验四1
4.2.1 继承的概念
通过类的继承, 祖先类的所有成员均将成为子类拥有的“财富”。 但是能否通过子类对 象直接访问这些成员则取决于访问权限设置。Object 类是所有类的祖先。
4.2.2 构造方法与继承关系
构造方法不存在继承关系,子类中是如何给父类继承的属性赋初值呢? 子类通过调用父类的构造方法给父类的属性赋值, 在子类的构造方法的第 1 行可以通过 super 去调用父类的构造方法,如果没有 super 调用,则默认调用父类的无参构造方法。所 以,在父类中编写构造方法通常均要提供无参构造方法。
实验 4 继承与多态 4.1 实验目的
(1) 理解类的继承,掌握变量隐藏、方法覆盖的概念。 (2)理解引用类型的变量的赋值转换原则。 (3)理解多态概念,掌握方法的匹配调用原则; (4)理解抽象类与接口的使用; (5)理解 this 和 super 的含义及使用。 (6)理解访问控制符的使用
4.2 知识要点
提高题
a=new
methodMatch ();
1) 分别下面程序中 x 的访问权限进行修改,测试访问许可。修改包括:private, protected,public 以及无访问控制符 4 种情形。 程序1:同一类情形(文件accessTest.java) package test class accessTest{
4.2.6 抽象类
定义形式: abstract class 类名称 { 成员变量; 方法(){……} //定义一般方法
abstract 方法();//定义抽象方法 } 在抽象类中可以包含一般方法和抽象方法。 抽象类表示的是一个抽象概念,不能被实例化为对象。 继承抽象类的具体类必须将抽象类中抽象方法覆盖实现。
(2) 使用抽象类的引用变量可引用子类的对象; (3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可 将所有对象存入到父类定义的数组中。 样例2:定义接口 Shape, 其中包括一个方法 size () ,设计“直线”、 “圆”、 “会议”、 “圆柱体”等类实现 Shape 接口。分别创建一个“直线”、“圆”、“会议”、“圆柱体” 存入一个数组中,将数组中各类图形的大小输出。 注:圆柱体可考虑由底边圆和高度两个部分组成。 【参考程序】 interface Shape { double size(); } class Line implements Shape { private double x1,y1,x2,y2; public Line(double x1, double y1, double x2, double y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; } public double size() {

接口的应用实验报告(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”的类,用于测试接口的应用。

python继承定义多态的实验体会

python继承定义多态的实验体会

Python继承定义多态的实验体会1. 引言在面向对象编程中,继承和多态是两个重要的概念。

继承指的是一个类可以继承另一个类的属性和方法,从而实现代码的重用和扩展。

而多态则指的是同一种行为或方法可以用不同的方式实现。

在Python中,继承和多态是通过类和对象的特性来实现的。

本文将通过一个实验来探讨Python继承定义多态的概念和应用。

2. 实验背景在实验之前,我们首先需要了解一些与实验相关的背景知识。

以下是一些基本的概念:•类(Class):类是对象的蓝图或模板,用于定义对象的属性和方法。

•对象(Object):对象是类的一个实例,具有类定义的属性和方法。

•继承(Inheritance):继承是一种机制,允许一个类继承另一个类的属性和方法。

•多态(Polymorphism):多态是指同一种行为或方法可以用不同的方式实现。

3. 实验方法为了说明Python继承定义多态的概念,我们可以通过一个实验来展示其应用。

下面是实验的步骤:1.首先,创建一个父类(ParentClass)和一个子类(ChildClass)。

2.父类中定义一个方法(parent_method),并在子类中重写该方法。

3.创建一个父类对象和一个子类对象。

4.调用对象的方法,并观察多态的效果。

4. 实验代码以下是实验所需的Python代码:class ParentClass:def parent_method(self):print("This is the parent method.")class ChildClass(ParentClass):def parent_method(self):print("This is the overridden method in child class.")parent_obj = ParentClass()child_obj = ChildClass()parent_obj.parent_method()child_obj.parent_method()5. 实验结果运行上述代码,我们可以得到以下结果:This is the parent method.This is the overridden method in child class.从上述结果可以看出,子类对象调用了父类方法时,实际上调用的是子类中重写的方法。

资料:《继承和多态》上机实践

资料:《继承和多态》上机实践

《继承和多态》上机实践一、根据课上讲解内容,完成演示示例和课堂练习1、使用重写优化电子宠物系统需求说明:按照方法的重写或方法的覆盖的注意事项:(1)子类根据需求对从父类继承的方法进行重新编写;(2)重写时,可以用super.方法的方式来保留父类的方法;(3)构造方法不能被重写;回顾之前使用继承实现的电子宠物系统,请使用方法的重写或覆盖优化现有代码,重写宠物类的宠物自白方法,在不同类型的宠物进行自白时,介绍其不同的特性,如:狗狗的自白需要介绍其品种、企鹅的自白需要介绍其性别。

实现如图所示的输出效果。

2、方法重写规则需求说明:熟悉方法重写的以下规则:(1)方法名相同;(2)参数列表相同;(3)返回值类型相同或者是其子类;(4)访问权限不能严于父类;(5)父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法;(6)子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法;(7)父类的私有方法不能被子类覆盖;(8)不能抛出比父类方法更多的异常正确使用方法的重写或覆盖;回忆老师课上演示的测试代码,请自行编写测试代码验证以上规则。

3、重写equlas()比较两个学员需求说明:重写equals()方法,如果学员学号(id)、姓名(name)都相同,证明是同一个学生,即两名学员(Student对象)为同一对象,输出如图所示的比较结果。

(注意:instanceof用于判断一个引用类型所引用的对象是否是一个类的实例)4、使用多态为宠物看病需求说明:(1)编写主人类(Master),添加不同的方法,根据输入的宠物类型不同,为不同的宠物看病。

编写测试类验证;(2)使用多态修改代码,为各宠物类添加看病的方法,主人类中保留一个为宠物看病方法即可,参数类型为宠物类类型。

编写测试类验证输出效果如图所示。

(注意:同一个引用类型,使用不同的实例而执行不同操作就是多态;方法重写是实现多态的基础)5、将Pet修改为抽象类需求说明:按照抽象方法的定义:(1)抽象方法没有方法体;(2)抽象方法必须在抽象类里;(3)抽象方法必须在子类中被实现,除非子类是抽象类;在作业4的基础上,将Pet修改为抽象类,实现如果所示的效果。

(4) 实验四 继承与多态

(4) 实验四 继承与多态
(1)类的继承
Java语言使用extends关键字在两个类之间建立这种类似与父子血缘关系的“继承”关系:在定义类时,使用extends来指明它的父类。
值得注意的是,Java中的继承只能是单继承即单根继承。
语法格式:
class SubClass extens SuperClass{//只能有一个父类
……
System.out.pri!~”);
}
public void fB(){
System.out.println(“method fB() from class B!”);
fA();
System.out.println(“x is”+ x);
}
}
public class Test{
2)什么时候需要使用super语句来显式调用父类构造?
(二)多态
多态是面向对象编程的重要技巧,它也是面向对象的重要特征之一。多态的本意是“同一个操作,不同的行为”,也就是使用同一个方法名,运行的实际是不同的方法。在Java语言中,多态主要通过方法的重载(Overloading)和重写(Overriding)实现。
public static void main(String[] args){
B b;
System.out.println(“====类已加载完毕=====”);
b = new B(10);
b.fB();
}
}
问题:
1)请结合运行结果分析Java中创建对象过程。(分析类的不同区域的运行前后次序,提示:类加载时或创建对象时,父类静态成员、实例成员、构造方法和子类静态成员、实例成员、构造方法的执行先后次序)
当程序运行并通过向上转型后的对象来调用方法时,Java会根据实际的对象类型来调用实际类型所对应的方法。这种运行时的多态,我们也成为动态绑定。

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编写一个圆锥类,能够计算圆锥的体积,要求圆锥类的构造函数中有一参数是圆类的一个对象。

继承与多态实验报告

继承与多态实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

继承与多态性

继承与多态性

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

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

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

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

三、概要设计(实现的功能,函数原型及说明等)对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。

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

Geometry(double c) 基类构造函数初始化{r=c;}virtual void GetArea()=0; 求面积的纯虚函数原型virtual void GetPeriMeter()=0; 求周长的纯虚函数原型virtual void GetColume()=0; 求体积的纯虚函数原型四、详细设计(程序中核心代码,并要有相应注释——函数功能、参数说明、重要语句的注解)class Geometry{ 抽象基类public:Geometry(double c){r=c;}//~Geometry();virtual void GetArea()=0; 分别用于求面积周长virtual void GetPeriMeter()=0; 体积的纯虚函数原型virtual void GetColume()=0;protected:double r;};--------------------------------------------------------------class Rectangle:public Geometry{public: 矩形派生类virtual void GetColume(){} 纯虚函数的重定义Rectangle(double a,double b,double c):Geometry(c){x=a;y=b; } 构造函数初始化//~Rectangle();void GetArea() 求面积的纯虚函数{ 在派生类中的重定义cout<<"The Rectangle's Area is";cout<<x*y<<endl;}void GetPeriMeter(){ 纯虚函数重定义cout<<"The Rectangle's PeriMeter is";cout<<2*(x+y)<<endl;}protected:double x;double y;};-------------------------------------------------------------------class Circle:public Geometry{ 派生类圆的类public:virtual void GetColume(){}Circle(double c):Geometry(c) 构造函数{}//~Circle();virtual void GetArea() 求面积的纯虚函数的重定义{cout<<"The Circle's Area is";cout<<3.14*r*r<<endl;}virtual void GetPeriMeter() 求周长的纯虚函数的重定义{cout<<"The Circle's PeriMeter is";cout<<2*3.14*r<<endl;}};------------------------------------------------------------class Ball:public Circle{ 圆的派生类球的类public:Ball(double c):Circle(c){ }virtual void GetArea() 求面积的纯虚函数的重定义{cout<<"The Ball's Surface Area is";cout<<6*3.14*r*r<<endl;}virtual void GetColume() 求体积的纯虚函数的重定义{cout<<"The Ball's V olume is";cout<<(4/3)*3.14*r*r*r<<endl;}//~Ball();};-------------------------------------------------------------------class Column:public Circle{ 园的派生类圆柱的类public:Column(double h,double c):Circle(c){H=h;}virtual void GetArea() 求面积的纯虚函数的重定义{cout<<"The Column's Surface Area is";cout<<(2*3.14*r*r)+(2*3.14*r*H)<<endl;}virtual void GetColume() 求体积的纯虚函数的重定义{cout<<"The Column's V olume is";cout<<3.14*r*r*H<<endl;}//~Column();protected:double H;};五、程序调试(包括调试过程中遇到的问题及解决方法、程序测试数据及结果)class Ball:public Circle{Public:Ball(double c):Circle(c){ }virtual void GetArea(){cout<<"The Ball's Surface Area is";cout<<6*3.14*r*r<<endl;}virtual void GetColume(){cout<<"The Ball's Volume is";cout<<(4/3)*3.14*r*r*r<<endl;}//~Ball();};在派生类球的类中将 public 写成Public导致错误不能编译成功六、实验总结(对实验过程中出现的问题进行总结、指出程序中还需进一步完善的地方、在本次实验中学到的内容及自身不足等)对本次试验进行总结:1.应对实验整体架构进行了解。

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

《高级Java编程技术》课程实验报告
院(系)名称:计算机学院专业班级:09计科 3 班
学号:姓名:
实验题目:实验10继承与多态
实验日期:2011/11/29实验(上机)学时:2
一、实验内容、要求
1.实验内容:计算课程成绩
2.要求:
编写应用程序,读入以下风格的文本文件,并显示最后的课程成绩,根据列出的公式,对于本科生和研究生,课程成绩的计算方法不同。

输入的文本格式如下:
(1)用单独的一行表示一个学生的信息。

(2)每行使用下面的格式:
<Type><Name> <Test1> <Test2> <Test3>
其中,<Type>指明学生是研究生,还是本科生;<Name>指明学
生的姓和名;<Testi>指明是第i次测试成绩。

(3)“END”指明输入的结束。

字母的大小写不重要。

公式如下:
学生类型评分方案
本科生通过,如果(test1+test2+test3)/3>=70
研究生通过,如果(test1+test2+test3)/3>=80
实现一个类完成以下功能:
(1)读入输入文本文件。

(2)计算课程成绩。

(3)输出结果。

我们将用五个增量步骤开发此程序:
(1)以程序结构开始,定义ComputeGrades类的框架。

(2)实现printResult方法,定义实现printResult所必需的任何其他方法。

(3)实现computerGrades方法,定义实现computerGrades所必需的任何其他方法。

(4)实现readDate方法,定义实现readDate所必需的任何其他方
法。

(5)最后完成并改进。

二、所采用的数据结构
如:线性表,二叉树,树,图等。

你在此用到了啥样的数据结构就写啥。

无数据结构。

三、实验的主要模块(或函数)及其功能
函数分块及各块主要功能的文字描述
ComputGrades类:这是本程序的主类,且是MainWindow的子类。

MainWindows本身是Jframe的子类,并且又将其自身放在屏幕中间的功能。

ComputGrades类包含的方法如下:
1、构造方法。

生成任意大小的数组,让程序员在构造方法中传递数组的
大小,不在构造方法中生成数组。

2、printResult方法。

将学生信息机计算出来的成绩输出到OutputBox
对象。

private void printResult()
3、conputeGrade方法。

扫描Student对象数组,并计算课程成绩。

private void computeGrade()
4、readData方法。

打开文本文件,并从中读取数据,从输入数据生成
Student对象的数组。

如果此操作成功,则返回true。

private boolean readData()
5、processDate方法。

显示自身,并执行三个主要任务。

public void processData()
6、buildRoster方法。

每次从指定的文件读取一行数据,对于每行数据,
生成一个相应的学生对象。

如果行中的数据与指定的格式不相符,则忽略此行。

private boolean buildRoster(String filename)
7、createStudent方法。

如果输入行中的类型是U或G,则通过调用
newStudentWithData方法生成学生对象。

如果成功,则返回生成的学生,否则,返回unll。

private Student createStudent(String line)
8、newStudentWithData 方法。

通过重复调用StringTokenizer 对象的
nextToken 方法,该方法生成UndergraduateStudent 或GraduateStudent 对象,并将对象赋给此对象。

四、主要模块(或函数)的算法思想和程序框图
上面三中的各块的具体算法实现文字描述或框图。

ComputeGrades 的程序图:
五、程序运行时的输入数据(随机产生的数据要求输出显示),输出结果
1、(1)打开保存有学生成绩信息的文件,此文件所有行的格式都正确:
MainWindow OutputBox ComputeGrades Gradute UnderGradute
没有显示 系统类
(2)输出结果:
2、(1)打开保存有学生成绩信息的文件,此文件某些行的格式不正确,例如:第四行的Mary Hin和Mick Taylor的格式有错,缺少一次成绩:
(2)程序的处理结果将会把格式有错的两行忽略掉,输出结果为:。

相关文档
最新文档