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());