java 实验5 接口多态 实验报告

合集下载

005-实验五 继承和接口(实验报告内容)

005-实验五 继承和接口(实验报告内容)

实验五继承和接口(实验报告)一、目的1.掌握Java语言继承机制。

二、实验内容定义一个超类,定义一个子类,实例化子类对象,调用超类的属性和方法,体会继承机制。

三、实验环境JDK1.6+dos环境四、实验原理1.继承机制五、实验步骤1、定义一个Person类,有属性姓名,年龄,性别。

Person具有吃饭,睡觉的行为。

定义一个Student类继承Person类,Student具有学习,看书的行为。

定义一个接口,能够输出自己的基本信息。

完成所设计的类的测试。

class Person{private String name;private int age;private String sex;public void setName( String name){ =name;}public String getName( ){return name;}public void setAge( int age){this.age=age;}public int getAge( ){return age ;}public void setSex( String sex){this.sex=sex;}public String getSex( ){return sex;}public void tell01(){System.out.println("会吃饭,能睡觉"); }public void tell02(){System.out.println("姓名:"+this.getName()+"性别:"+this.getSex()+"年龄:"+this.getAge());}}interface A{public void print01();public void print02();}class Student extends Person implements A{private int number;public void setNumber(int number){this.number=number;}public int getNumber( ){return number;}public void tell03(){System.out.println("姓名:"+this.getName()+"\n性别:"+this.getSex()+"\n年龄:"+this.getAge()+"\n学号:"+this.getNumber());}public void tell04(){System.out.println("爱学习,喜欢看书");}public void print01(){System.out.println("巴黎下着小雨!!!");}public void print02(){System.out.println("吉大正在飚雨!!!");}}public class mytest01{public static void main(String args[]){Student stu = new Student();stu.setName("张三");stu.setAge(20);stu.setSex("男");stu.setNumber(2011);stu.tell01();stu.tell03();stu.tell04();stu.print01();stu.print02();}}六、实验小结。

多态性实验报告

多态性实验报告

多态性实验报告一、实验目的本次实验的主要目的是深入研究和理解多态性这一重要的概念,并通过实际操作和观察来验证多态性在不同情境下的表现和作用。

二、实验原理多态性是面向对象编程中的一个关键特性,它允许不同的对象对相同的消息或操作做出不同的响应。

这种特性基于类的继承和方法的重写机制。

当一个父类的引用指向子类对象时,通过该引用调用方法时,实际执行的是子类中重写的方法,从而实现了多态性。

三、实验材料与环境1、编程语言:选择了 Java 作为实验的编程语言。

2、开发工具:使用了 IntelliJ IDEA 作为集成开发环境。

3、实验设备:一台配置良好的计算机,操作系统为 Windows 10。

四、实验步骤1、创建父类`Shape````javaclass Shape {public void draw(){Systemoutprintln("Drawing a shape");}}```2、创建子类`Circle` 和`Square` 继承自`Shape````javaclass Circle extends Shape {@Overridepublic void draw(){Systemoutprintln("Drawing a circle");}}class Square extends Shape {@Overridepublic void draw(){Systemoutprintln("Drawing a square");}}```3、在主函数中进行测试```javapublic class PolymorphismTest {public static void main(String args) {Shape shape1 = new Circle();Shape shape2 = new Square();shape1draw();shape2draw();}}```五、实验结果运行上述代码,输出结果为:```Drawing a circleDrawing a square```这表明,通过父类的引用调用`draw` 方法时,实际执行的是子类中重写的方法,实现了多态性。

java实验报告 接口、泛型、枚举、内部类与异常

java实验报告 接口、泛型、枚举、内部类与异常

实验报告课程名称: Java程序设计成绩评定:实验项目名称:接口、泛型、枚举、内部类与异常指导教师:学生姓名:学号:专业班级:实验项目类型:基础实验地点:实验时间:一、实验目的与要求:1、理解接口的定义与实现;2、知道泛型、枚举型与内部类的基本应用;3、掌握常用异常的抛出与捕获及处理.二、实验环境:(硬件环境、软件环境)1.硬件环境:奔ⅣPC。

2.软件环境:Windows XP 操作系统,JDK6.0。

三、实验内容:(原理、操作步骤、程序代码等)任务:1、按照要求完成下述接口及实现类的程序1)定义名称为PCI()的接口,包括启动的方法start和关闭的方法stop;2)定义名称为NetworkCard 的类表示网卡,实现PCI接口,并且其在实现start方法时输出“sending data……”,在实现stop方法时输出“network stop.”3)定义名称为SoundCard 的类表示声卡,实现PCI接口;并且其在实现start方法时输出“dudu……”,在实现stop方法时输出“sound stop.”4)定义名称为MainBoard 的类表示主板,包含方法public void usePCICard(PCIp),在方法体内通过p来启动和关闭组件;5)定义一个包含main方法的Test类,在main方法内创建一个MainBoard 对象用mb来引用,创建一个NetworkCard对象用nc来引用,创建一个SoundCard对象用sc来引用,分别通过mb来使用usePCICard(PCI p)启动声卡和网卡。

2、泛型类程序的调试调试教材P165的程序8-2,写出程序运行结果,理解泛型类的工作机理及应用。

3、调试运行内部类程序:在类内部再定义另外一个类,这个另外定义的类就叫内部类。

调试教材P171-172程序8-3,写出程序运行结果,理解内部类的定义方法与应用。

4、异常抛出与捕获编程与调试先调试教材P182、183中的程序9-2和9-3,写出调试结果。

java接口实验心得

java接口实验心得

java接口实验心得在进行Java接口实验过程中,我深刻体会到接口的重要性和灵活性。

接口是一种规范,它定义了类应该具备的方法,并且可以被多个类实现,使得代码更加模块化和可扩展。

首先,通过实验我明白了接口的作用。

接口可以看作是一种契约,定义了类应该遵守的规则。

它提供了一种机制,使得不同的类可以实现相同的接口,并且具有相同的方法。

这样可以实现多态性,提高代码的可复用性和可扩展性。

其次,实验过程中我学会了如何定义接口。

在Java中,接口使用`interface`关键字来定义,接口中只包含方法的声明,没有方法的实现。

接口中的方法默认是`public`和`abstract`的,不需要显式地声明。

接口也可以包含常量和静态方法。

另外,我还了解到接口的实现方式。

一个类可以通过`implements`关键字来实现一个或多个接口,并且需要实现接口中声明的所有方法。

通过实现接口,类可以获得接口中定义的方法,并根据自己的需求进行具体的实现。

这种方式使得类与接口之间实现了解耦,使得代码更加灵活。

在实验过程中,我还学会了接口的多态性。

通过将接口作为方法的参数或返回值类型,可以实现对不同实现类的统一操作。

这样可以提高代码的灵活性和可扩展性,使得程序更易于维护和扩展。

此外,我还了解到接口的继承和多继承。

一个接口可以继承另一个接口,通过继承可以扩展接口的功能。

这种方式使得接口之间可以建立继承关系,实现更加灵活的接口设计。

总结起来,通过这次Java接口的实验,我深刻认识到接口的作用和优势。

接口可以定义规范,实现多态性,提高代码的可复用性和可扩展性。

同时,接口的实现方式和多态性使得代码更加灵活。

接口的继承和多继承可以扩展接口的功能。

掌握接口的使用,对于编写高质量的Java代码非常重要。

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

实验5:Java抽象类与接口

实验5:Java抽象类与接口

实验5:Java抽象类与接口实验时间:实验地点:一、实验目的及要求(1)掌握抽象类的概念及使用。

(2)掌握接口的概念和实现方式。

(3)理解抽象类和接口的区别。

二、实验设备环境及要求三、实验任务(1)输入给定的Java Application程序,写出运行结果。

(2)按照要求编写Java Application程序。

四、实验内容与步骤1.分析下列程序的输出结果。

interface Myface{int getnext();void setstart(int x);}class Add3 implements Myface{int sta,val;Add3(){sta=0;val=0;}public int getnext(){val+=3;return val;}public void setstart(int i){sta=i;val=i;}}public class Face{public static void main(String args[]){Add3 a=new Add3();for(int i=0;i<5;i++)System.out.println(a.getnext());System.out.println();a.setstart(10);for(int i=0;i<5;i++)System.out.println(a.getnext());}}2.按照要求编写Java Application程序。

假定要为某个公司编写雇员工资支付程序。

这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资:经理(Manager):每月获得一份固定的工资;销售人员(Salesman):在基本工资的基础上每月还有销售提成;一般工人(Worker):则按他每月工作的天数计算工资。

试用类的继承及相关机制描述这些功能需求,并编写一个Java Application程序,演示这些类的用法。

多态编程实验报告

多态编程实验报告

一、实验目的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方法时,会根据实际对象的类型调用相应的方法,实现了多态。

接口用法示例实验报告(3篇)

接口用法示例实验报告(3篇)

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

2. 掌握接口的基本用法,包括接口的定义、实现和实现类。

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

二、实验环境1. 操作系统:Windows 102. 开发工具:IntelliJ IDEA3. 编程语言:Java三、实验内容1. 接口的基本概念2. 接口的定义与实现3. 接口的多态性4. 接口的应用示例四、实验步骤1. 接口的基本概念(1)打开IntelliJ IDEA,创建一个新的Java项目。

(2)在项目下创建一个包,命名为“com.example”,用于存放实验代码。

(3)在包下创建一个接口,命名为“IAnimal”,用于定义动物的基本行为。

```package com.example;public interface IAnimal {void eat();void sleep();}```2. 接口的定义与实现(1)在“com.example”包下创建一个类,命名为“Dog”,实现“IAnimal”接口。

```package com.example;public class Dog implements IAnimal {@Overridepublic void eat() {System.out.println("狗吃肉");}@Overridepublic void sleep() {System.out.println("狗睡觉");}}```(2)在“com.example”包下创建另一个类,命名为“Cat”,实现“IAnimal”接口。

```package com.example;public class Cat implements IAnimal {@Overridepublic void eat() {System.out.println("猫吃鱼");}@Overridepublic void sleep() {System.out.println("猫睡觉");}}```3. 接口的多态性(1)在主类“Main”中创建一个方法,用于测试接口的多态性。

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

实验五接口、多态与内部类实验目标:1、理解接口、塑型、多态的概念并能熟练应用;2、熟练掌握接口的定义和使用;3、深刻理解构造方法的调用顺序,理解编写时需要注意的问题;4、了解并学会使用内部类实验任务:1、继承时的多态:目测给出下面代码的执行输出结果,并简单解释每一行输出的原因。

答:首先,该程序的主函数是Vehicle v=new Vehicle();即先声明并实例化一个汽车对象,而v.test();则是调用汽车的测试方法;而test方法里,Vehicle vc=new Car();是将上面的汽车指向了一个具体的小汽车对象;Bus vb=new Bus();将公共汽车指向了一个具体的公共汽车对象;drive();调用汽车的驾驶方法;vc.drive();调用小汽车的驾驶方法;vb.drive();调用公共汽车的驾驶方法;而vc.brake();vb.brake();则是直接调用汽车的刹车方法。

因而运行结果如下:A new bus.Vehicle is drivenCar is drivenBus is drivenVehicle is brakedVehicle is braked2.针对下面的简单的类图,从面向对象的角度,将Instrument定义成接口,应怎样实现。

编写能完成如图功能的程序,并再编写一个简单的应用程序进行多态性测试。

(参考例子5-9;实验4该题是要求用抽象类来实现,在此要求用接口实现,还要进行多态性测试)说明:Instrument表示乐器、Wind表示管乐器、Percussion敲击乐器、Stringed表示弦乐器、Woodwind表示木管乐器、Brass表示铜管乐器。

要求:(1)Instrument为接口,Wind为抽象类,其他为普通类。

这里测试的目的是:我们知道当一个普通类实现一个接口时,必须实现该接口的全部方法,但当这个类是抽象类时,我们还需要实现该接口全部方法吗?如果不需要实现?那么是否直接不理这个方法就一,还是要将这个方法在自己类内部再标记一次为抽象方法。

(听起来有点晕,测试很简单的,有时百读不如一试)(2)请编写测试代码,对实现Instrument接口的各个类进行多态测试,具体可参考课本例子。

所谓多态测试就是向上自动塑型,以及向下动态绑定,而动态绑定的基本规则是实例方法“由下往上”寻找绑定,类方法和类属性成员“由上往下”寻找绑定。

(对其概念不清晰的请留意课本知识与课堂讲解)该题代码如下:package zi;interface Instrument {void play();String what();void adjust();}abstractclass Wind implements Instrument { publicvoid play() {System.out.println("Wind.play()");}publicabstract String what() ;publicvoid adjust() {System.out.println("Wind.adjust");}}class Percussion implements Instrument { publicvoid play() {System.out.println("Percussion.play()");}public String what() {return"Percussion.play()";}publicvoid adjust() {System.out.println("Percussion.adjust()"); }}class Stringed implements Instrument { publicvoid play() {System.out.println("Stringed.play()");}public String what() {return"Stringed.play()";}publicvoid adjust() {System.out.println("Stringed.adjust()"); }}class Brass extends Wind {publicvoid play() {System.out.println("Brass.play()");}public String what() {return"Brass.play()";}publicvoid adjust() {System.out.println("Brass.adjust()");}}class Woodwind extends Wind {publicvoid play() {System.out.println("Woodwind.play()");}public String what() {return"Woodwind.play()";}publicvoid adjust() {System.out.println("Woodwind.adjust()");}}publicclass Ex5_2 {publicstaticvoid main(String[] args) {Instrument i2,i3,i4,i5;// i1 = new Wind();//i1.play();i2 = new Percussion();i2.play();i3 = new Stringed();i3.play();i4 = new Brass();i4.play();i5 = new Woodwind();i5.play();}}其执行结果如下图所示:该程序的uml图截图如下:3.编写程序,要求如下:(1)定义Biology(生物)、Animal(动物)和Mankind(人)3个接口;该题代码截图如下:以下为Biology(生物)的接口:以下为Animal(动物)的接口:以下为Mankind(人)的接口:(2)接口Biology声明breath()抽象方法;截图如下:(3)接口Animal继承Biology并声明move()和eat()抽象方法;其代码如下:interface Animals extends Biology{void breathe();void eat();void move();}(4)接口Mankind继承Animal并声明study()和think()抽象方法,增加属性MaxAge;其代码如下:package zi;interface Biology{void breath();}interface Animal extends Biology{void move();void eat();}publicinterface Mankind extends Animal{int MaxAge=150;void studty();void think();}其UML图截图如下:(5)定义类Man和Woman实现接口Mankind,实现它们声明的抽象方法,并增加属性,name,sex(类属性成员)和age;(具体实现可以只显示相应的提示信息就可以,如同书本例子一样);(6)在类Man和Woman中实现无参构造方法和有参构造方法两种不同的构造方法,有参构造方法输入自己姓名,自己年龄,在构造方法中如果年龄超出MaxAge则输出出错信息并修改成默认年龄。

(7)编写测试类使用接口Mankind来测试类Man和Woman的多态性。

(向上塑型和向下动态绑定)以上三小问的程序如下所示:package zi;publicinterface Mankind extends Animal{int MaxAge=150;void study();void think();}package zi;publicclass Man implements Mankind {protected String name;static String sex="male";protectedint age;public Man(){this("某男",18);}public Man(String name,int age){=name;if((age<=MaxAge)&&(age>0)){this.age=age;}else{System.out.println("Age Wrong,Init 18");this.age=18;}}@Overridepublicvoid move() {// TODO自动生成的方法存根System.out.println("Man's move");}@Overridepublicvoid eat() {// TODO自动生成的方法存根System.out.println("Man's eat");}@Overridepublicvoid breath() {// TODO自动生成的方法存根System.out.println("Man's breath");}@Overridepublicvoid study() {// TODO自动生成的方法存根System.out.println("Man's study");}@Overridepublicvoid think() {// TODO自动生成的方法存根System.out.println("Man's think");}public String toString(){return(name+","+sex+","+age);}}package zi;publicclass Woman implements Mankind { protected String name;static String sex="female";protectedint age;public Woman(){this("某女",18);}public Woman(String name,int age){=name;if((age<=MaxAge)&&(age>0)){this.age=age;}else{System.out.println("Age Wrong,Init 18");this.age=18;}}@Overridepublicvoid move() {// TODO自动生成的方法存根System.out.println("Woman's move");}@Overridepublicvoid eat() {// TODO自动生成的方法存根System.out.println("Woman's eat");}@Overridepublicvoid breath() {// TODO自动生成的方法存根System.out.println("Woman's breath");}@Overridepublicvoid study() {// TODO自动生成的方法存根System.out.println("Woman's study");}@Overridepublicvoid think() {// TODO自动生成的方法存根System.out.println("Woman's think");}public String toString(){return(name+","+sex+","+age);}}package zi;publicclass Ex5_3 {publicstaticvoid main (String[] args){ Mankind m1=new Man("张男",-2);Mankind m2=new Woman("李女",180);System.out.println(m1.toString());System.out.println(m2.toString());m1.breath();m2.breath();m1.move();m2.move();m1.study();m2.study();m1.think();m2.think();}}其UML图如下图所示:4.在第4章课后习题10的基础上(也是实验04的实验题),声明测试类完成对多态性的测试,具体要求请参见课本171页第5章课后习题8。

相关文档
最新文档