Java实验指导 下载本文

2.以下程序的运行结果?

import java.util.Calendar;

class Time {

private Calendar t;

private int y, m, d, hh, mm, ss;

Time (){

t=Calendar.getInstance();

y=t.get(t.YEAR);

m=t.get(t.MONTH)+1;

d=t.get(t.DATE);

hh=t.get(t.HOUR_OF_DAY);

mm=t.get(t.MINUTE);

ss=t.get(t.SECOND);

}

public String getDate() {

return y+" 年"+m+"月"+d+"日";

}

public String getTime() {

return hh+" 时"+mm+"分"+ss+"秒";

}

}

public class EXP3_3{

public static void main(String[] args){

Time t=new Time();

System.out.println("当前日期:"+t.getDate());

System.out.println("当前时间:"+t.getTime());

}

}

实验3 Java继承与接口(4学时)

1. 实验目的

掌握继承、抽象类、抽象方法和接口的概念,理解Java继承的优势,掌握extends、implements、super和final关键字的使用,掌握继承过程中构造方法的调用顺序,掌握继承体系中方法覆盖的机制,掌握抽象类和接口的区别,理解类与接口,接口与接口之间的实现与继承关系。

2. 实验类型

设计型

3. 实验基本要求

1. (与上课例子一致)假定要为某个公司编写员工工资支付程序,这个公司有各种类型的员工员(Employee),不同类型的员工按不同的方式支付工资:

(1)经理(Manager)——每月获得一份固定的工资

(2)销售人员(Salesman)——在基本工资的基础上每月还有销售提成。

(3)一般工人(Worker)——则按他每月工作的天数计算工资。

根据上述要求试用类的继承和相关机制实现这些功能,设计一个测试类EmployeeDemo,分别创建经理、销售人员和一般工人这三个类的对象,并输出每种员工的工资。(提示:应设计一个抽象的员工类(Employee)描述所有雇员的共同特性,这个类应该提供一个计算工资的抽象方法ComputeSalary(),使得可以通过这个类计算员工的工资。经理、销售人员和一般工人对应的类都应该继承这个类,并给出每种员工工资的计算方法,进而给出它的具体实现。)

2. 假定根据学生的3门学位课程的分数决定其是否可以拿到学位,对于本科生,如果3门课程的平均分数超过60分即表示通过,而对于研究生,则需要平均超过80分才能够通过。根据上述要求,请完成以下Java类的设计:

(1)设计一个基类Student描述学生的共同特征(包括的属性:名字(name),A课程的成绩(classA),B课程的成绩(classB),C课程的成绩(classC),包括的方法:getAverage(),计算3门课的平均成绩)。

(2)设计一个描述本科生的类Undergraduate,该类继承并扩展Student类(除了继承父类的属性和方法外,还包括一个方法isPass(),判断该本科生是否可以拿到学位。提示:调用从父类继承来的getAverage()方法获得3门课程的平均成绩)。

(3)设计一个描述研究生的类Graduate,该类继承并扩展Student类(除了继承父类的属性和方法外,还包括一个方法isPass(),判断该研究生是否可以拿到学位。提示:调用从父类继承来的getAverage()方法获得3门课程的平均成绩)。

(4)设计一个测试类StudentDemo,分别创建本科生和研究生这两个类的对象,并输出相关信息。

3.编写程序,定义一个计算面积的接口Area,其中包含一个计算面积的抽象方法calculateArea()。然后设计圆Circle和矩形Rectan两个类实现这个接口中的方法。最后定义一个计算圆和矩形的面积的测试类AreaDemo。提示:Circle类包含的属性包括:常量PI(定义为public static final double PI=3.14159),成员变量半径:radius,要实现接口中的方法calculateArea();Rectan类包含的属性包括:矩形的长和宽,要实现接口中的方法calculateArea()。

4. 实验思考题

1.阅读如下所示的3个Java类的定义,分析它们之间的关系,写出运行结果。

class SuperClass {

int x;

SuperClass() {

x=3;

System.out.println("in SuperClass : x=" +x);

}

void doSomething() { System.out.println("in SuperClass.doSomething()");

}

}

class SubClass extends SuperClass {

int x;

SubClass() {

super(); //调用父类的构造方法

x=5; //super( ) 要放在方法中的第一句

System.out.println("in SubClass :x="+x);

}

void doSomething( ) {

super.doSomething( ); //调用父类的方法

System.out.println("in SubClass.doSomething()");

System.out.println("super.x="+super.x+" sub.x="+x);

}

}

public class Inheritance {

public static void main(String args[]) {

SubClass subC=new SubClass();

subC.doSomething();

}

}

2.以下程序的运行结果?

public class EXP3_7

{

protected String xm; //具有保护修饰符的成员变量 protected int xh;

void setdata(String m,int h) //设置数据的方法

{

xm =m;

xh = h;

}

public void print() //输出数据的方法

{

System.out.println(xm+", "+xh);

}

}

class EXP3_8 extends EXP3_7{

protected String xy;

protected String xi;

public static void main(String args[]){

EXP3_7 p1 = new EXP3_7();

p1.setdata("李四",12321) ;

p1.print();

EXP3_8 s1 = new EXP3_8() ;

s1.setdata("张三",12345); //调用父类的成员方法 s1.xy="成都信息工程学院"; //访问本类的成员变量 s1.xi="计算机系"; //访问本类的成员变量

s1.print();

System.out.print(s1.xm+", "+s1.xy+", "+s1.xi); }

}

3.以下程序的运行结果?

class Point {

protected int x, y;

Point(int a, int b) {

setPoint(a, b);

}

public void setPoint(int a, int b) {

x=a;

y=b;

}

}

class Line extends Point {

protected int x, y;

Line(int a, int b) {

super(a, b);

setLine(a, b);

}

public void setLine(int x, int y) {

this.x=x+x;

this.y=y+y;

}

public double length() {

int x1=super.x, y1=super.y, x2=this.x, y2=this.y;

return Math.sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)); }

public String toString() {

return "直线端点:[" + super.x + "," + super.y + "] [" + x + "," + y + "] 直线长度:" + this.length(); }

}

public class EXP3_10{

public static void main(String args[]) {

Line line=new Line(50, 50);

System.out.println("\n"+line.toString());