当前位置:首页 > JAVA继承、接口和多态实验 - 图文
《面向对象程序设计》实验报告 1 一、实验目的 (1)掌握类的继承机制。 (2)熟悉类中成员变量和方法的访问控制。 (3)熟悉方法或构造方法多态性。 (4)熟悉接口的定义方法。 二、实验内容 (1)定义一个球类Ball,包含一个私有成员变量——半径(double r),两个公有成员方法:设定半径方法(void setR(double x))、得到半径值方法(double getR())。 定义一个台球类Billiards,继承Ball类,包含一个私有成员变量——颜色(String color),两个公有成员方法:设定颜色方法setColor()、输出信息方法show(),其中show()方法可以输出该台球的颜色和半径值。 定义一个公有类TestBall,测试前两个类。 (2)定义一个抽象类Driver,它有String gender(性别)和int age(年龄)两个成员属性,还有一个抽象的成员方法drives(Vehicle v),并从它派生出FemaleDriver和MaleDriver两个子类。 定义一个抽象类Vehicle,它有String type(车型)和int id(车牌号码)两个成员属性,还有一个抽象的成员方法drivedByDriver(Driver who),并从它派生出Bus和Car两个子类。 定义一个测试类TestDemo,在其main()方法中先创建fd和md两个Driver对象,然后创建vb和vc两个Vehicle对象。 ① 先将以上所有类均放置到cn.edu.sdju.exp031包中,然后以两种方式,分别通过调用drives()和drivedByDriver()成员方法输出如下字符串: A Female drives a Car A Male drives a Bus ② 通过将Bus和Car类放置到cn.edu.sdju.exp032包中,检验各个类及其成员的访问权限; ③ 注释掉TestDemo类,在cn.edu.sdju.util包中新建一个LimitRun测试类。在LimitRun类的main()方法中先创建20个Vehicle对象(随机生成车牌号,车牌号范围为1~1000),并规定只有双号车辆能够通过,输出所有车辆的通过情况。 (3)编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。定义一组学生对象,并初始化他们的基本信息,然后依次输出。 (4)接口实验 程序文件TestInterface.java。运行该程序,然后按【思考问题】内容修改和观察程序。 interface rec_Area_Peri { int getArea(); int getPerimeter(); } class rectangle implements rec_Area_Peri { int width, length; 《面向对象程序设计》实验报告 2 rectangle(int w, int l) { width=w; length=l; } public int getArea() { return width*length; } public int getPerimeter() { return (2*(width+length)); } } public class TestInterface { public static void main(String args[]) { rectangle rect=new rectangle(10,20); System.out.println(\矩形面积=\ System.out.println(\矩形周长=\ } } 【思考问题】 ①在实现类rectangle中注释掉一个方法后进行编译,看发生了什么?为什么? ②在实现类rectangle中将各实现方法前的public修饰符去掉再进行编译,看发生了什么?为什么? ③将接口rec_Area_Peri中定义的两个方法前加上abstract修饰符再编译,看对程序有影响否?为什么? ④不用单独的实现类rectangle,直接在主类classe TestInterface中实现那两个方法,如何修改程序? ⑤将接口rec_Area_Peri中定义的两个方法拆分定义成两个接口,即每个接口只定义一个方法,程序将如何修改? 三、实验结果(关键代码和运行结果) (1)关键代码: class Ball { } private double r; void setR(double x) { } double getR() { } return r; r = x; 《面向对象程序设计》实验报告 3 class Billiards extends Ball { void show() { } public class TestBall { } public static void main(String[] args) { } Scanner reader = new Scanner(System.in); System.out.println(\请输入球的半径:\); double x = reader.nextDouble(); System.out.println(\请输入台球的颜色:\); String y = reader.next(); Billiards bill = new Billiards(); bill.setColor(x, y); bill.show(); } System.out.println(\台球的颜色为\ + color + \ + \台球的半径为:\ + void setColor(double x, String clo) { } super.setR(x); color = clo; private String color; super.getR()); 图3-1运行结果 (2)①关键代码: Driver.java的代码(Vehicle.java的代码类同): public abstract class Driver { private String gender; private int age; public Driver(){ } 《面向对象程序设计》实验报告 4 public Driver(String gen,int a){ } public String getGender(){ } public void setAge(int a){ } public int getAge(){ } public abstract String driver(Vehicle v); return age; age=a; return gender; gender=gen; age=a; } gender=gen; public void setGender(String gen){ } Bus.java的代码: public class Bus extends Vehicle{ public Bus(String t, int i) { } public String drivedByDriver(Driver who){ return \; super(t, i); } } } Testdemo.java的代码: import javax.swing.JOptionPane; public class TestDemo { public static void main(String args[]) { } FemaleDriver fd = new FemaleDriver(\, 35); MaleDriver md = new MaleDriver(\, 32); Bus vb = new Bus(\, 1234); Car vc = new Car(\, 5678); String output = \ + fd.driver(vc) + \ + vc.drivedByDriver(fd) + \ + \ + md.driver(vb) + \ + vb.drivedByDriver(md); JOptionPane.showMessageDialog(null, output); System.exit(0); 运行结果: a.用简单的输出方式
共分享92篇相关文档