实验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) { = 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) { = 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","无效日期",RMATION_MESSAGE);break;}}catch (Exception e1) {// TODO: handle exceptionJOptionPane.showMessageDialog(null, "您输入的不是整数","无效日期",RMA TION_MESSAGE);}}}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}}2.编译运行五、实验结果●实验内容一结果:●实验内容二结果:●实验内容三结果:六、实验小结1.这次实验的内容比较多,需要掌握Java的类和对象的声明和使用方法、Java的类的继承和实现方法、多态性在类的继承中的运用、接口的定义与使用、基本异常的处理机制、try语句与catch语句的搭配使用等等;2. 在实验过程中,重点是要区分好实例和类,灵活掌握类的调用。