实验三 Java类和对象
(一)教学要求
掌握定义类与创建对象实例的方法;掌握类方法和属性的定义和使用;掌握构造方法的定义及其使用。
(二)知识点提示
类;构造函数和析构函数;
(三)教学内容
1. 编译并运行下列程序,观察结果分析其原因。
package ch3; public class PassValueTest { private int i = -100; public void test1(int b) { b = 100; } public void test2(PassValueTest b) { b.i = 100; } public void test3(PassValueTest b) { b = this; } public static void main(String[] args) { PassValueTest obj = new PassValueTest(); int temp = 100; obj.test1(temp); System.out.println(temp); obj.test2(obj); System.out.println(obj.i); obj.i=100; PassValueTest newobj = new PassValueTest(); obj.test3(newobj); System.out.println(newobj.i); } } package ch3; public class ClassLoadTest{ static{ System.out.println(\ } public static void main(String [] args) { } } 2.编译下列程序,分析结果;将“注释这行”所在的行注释,再将注释的call2方法和main方法中的“StaticTest.call2(obj);”去掉注释,再次编译,观察结果分析其原因
package ch3; public class StaticTest { public static void call1(){ staticmethod(); nonstaticmethod(); //注释这行 } /* public static void call2(StaticTest o1){ o1.nonstaticmethod(); StaticTest o2=new StaticTest (); o2.nonstaticmethod(); } */ public void nonstaticmethod(){ System.out.println(\非静态方法被调用\ } public static void staticmethod(){ System.out.println(\静态方法被调用\ } public static void main(String[] arg){ StaticTest obj=new StaticTest (); StaticTest.call1(); StaticTest.call2(obj); } } 3.定义一个圆类Circle,至少具有私有成员变量:radius(double型,用于保存半径)、area(double型,用于保存面积)、length(double型,用于保存周长),以及成员方法setRadius、getRadius(用于设置、获取半径)、getArea(用于获得面积)、getLength(用于获取周长)、print(打印圆对象的半径、面积、周长信息)。
(1)在main方法,要求方法中通过“Circle c1=new Circle(); Circle c2=new Circle(100);”分别新建半径为1和半径为100的圆对象,分别打印c1同c2的信息;
(2)使c2的半径等于c1的半径,使c1的半径等于原c2的半径,分别打印c1同c2的信息;
4.定义一个日期类MyDate,至少具有私有成员变量:year、month、day,以及成员方法setYear、getYear等(具体隐藏实现方法,用于设置、获取成员变量)、isRunyear(boolean型,判断当前对象保存的年是否为闰年)、print(打印日期对象的年\\月\\日信息)。
(1)在main方法,要求方法中通过“MyDate d1=new MyDate(); MyDate d2=new
MyDate(2009,4,1);”分别新建年月日为1999年1月1日的日期对象和年月日为2009年4月1日的日期对象,分别打印d1同d2的信息;
(2)使d2的年等于d1的年,使d1的月等于原d2的月,分别打印d1同d2的信息 (四)思考题
1. 什么是类?什么是对象?它们之间的关系是怎样的?
2. 作为引用数据类型,对象在赋值和方法的参数传递方面与基本数据类型的变量有什么不同?
3.什么是封装?为什么要将类封装起来?封装的原则是什么?有哪些封装手段? 4. this引用有什么用?this引用有几种使用方法?
5. 类有几种访问权限?类中成员有几种访问权限?分别使用什么关键字表示?
实验四 Java继承
(一)教学要求
掌握类的继承原则,正确使用重载和覆盖等多态概念设计可复用方法,理解运行时多态性概念。 (二)知识点提示 Java类继承性的实现 (三)教学内容
1.已知Employee类的定义,为其编写一个子类TempEmployee,其基本工资为500,计算工资办法为:工资=基本工资+奖金;如需要可以修改Employee类属性的访问修饰符。
public class Employee{ private String name; private String department; private double basicpay; private double pay; Employee(){ this(\} Employee(String n, String d, double bp){ name=n; department=d; basicpay=bp; } public double getPay(){ pay=basicpay; return pay; } public String toString(){ return \ } }
2、设计一个形状类Shape,包含一个getArea()方法,该方法不包含实际语句。
3、在Shape类基础上设计圆形、矩形、三角形和梯形四个子类,要求根据实际形状重写getArea()方法。
4、设计一个TestShape类,包含变量area(存储总面积)、静态方法countArea(Shape s),该方法负责把参数中的形状面积加入到area中。在main函数中新建3中四种类型的对象s1、s2、s3、s4,通过调用countArea方法把四个对象面积累加到area中,最后输出area。
(四)思考题
1.什么是继承?继承机制的作用是什么?子类继承了父类中的什么?子类不需要父类
的成员时怎么办?能删除它们吗?Java允许一个类有多个父类吗?
2. 如果一个类没有父类,那么它的父类是谁?