实验 3 面向对象编程练习
一、实验目的
通过编程和上机实验理解 Java 程序设计是如何体现面向对象编程基本思想,了解类的封装方法,以及 如何创建类和对象,了解成员变量和成员方法的特性,掌握 OOP 方式进行程序设计的方法,了解类的继承性和多态性的作用。
二、实验要求
1. 编写一个体现面向对象思想的程序。
2. 编写一个创建对象和使用对象的方法的程序。 3. 编写一个显示当前日期和时间的程序。 4. 编写不同成员变量修饰方法的程序。 5. 编写不同成员方法修饰方法的程序。
6. 编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。 7. 编写体现类的多态性(成员方法重载、构造方法重载)的程序。
三、实验内容
(一)创建 Applet 应用小程序
1.创建一个 Applet 应用程序 KY3_1.java 文件。
(1)程序功能:建立一个 Applet 小程序,使其可以进行简单的加法运算。该程序要包含类、接口、属性、方法、事件等面向对象的基本元素。 (2)程序源代码如下。 import java.awt.*;
import java.awt.event.*; import java.applet.Applet;
public class KY3_1 extends Applet implements ActionListener { Label label1=new Label(\ Label label2=new Label(\ TextField field1=new TextField(6); TextField field2=new TextField(6); TextField field3=new TextField(6); Button button1=new Button(\相加\ public void init() { // 初始化 add(field1); add(label1); add(field2); add(label2);
- 14 -
add(field3); add(button1);
button1.addActionListener(this); }
public void actionPerformed(ActionEvent e) { // 处理按钮事件
int x=Integer.parseInt(field1.getText())+Integer.parseInt(field2.getText()); field3.setText(Integer.toString(x)); // 数值转换为字符串 } }
2. 编写一个浏览 Applet 应用程序的页面文件 KY3_1.HTML,源代码如。
3. 将 KY3_1.java 源程序编译为 KY3_1.class 文件
4. 使用浏览器或使用小程序查看器浏览 KY3_1.HTML 文件(即在命令提示符窗口输入:
appletviewer KY3_1.HTML),运行。
(二)创建对象并使用对象
1.编写 Applet 程序 ? 程序功能:这个 Applet 程序要在页面上输出两个矩形,并伴有文字输出。 ? KY3_2.java 程序的源代码如下。 import java.awt.*;
import java.applet.Applet;
public class KY3_2 extends Applet {
MyBox b1=new MyBox();//创建对象 b1
MyBox b2=new MyBox(170,20,60,60); //创建对象 b2 public void paint(Graphics g) { b1.setPosition(20,20); b1.setSize(60,60); b1.draw(g);
g.drawString(\矩形 1 的 X 位置: \ g.drawString(\矩形 1 的 Y 位置: \ b2.draw(g);
g.drawString(\矩形 2 的 X 位置: \ g.drawString(\矩形 2 的 Y 位置: \ } }
class MyBox {
private int x, y, width, height; MyBox() { x=0; y=0; width=0;
- 15 -
height=0; }
MyBox(int xPos, int yPos, int w, int h) { x=xPos; y=yPos; width=w; height=h; }
public void setPosition (int xPos, int yPos) { x=xPos; y=yPos; }
public void setSize (int w, int h) { width=w; height=h; }
public int getX() { return x; }
public int getY() { return y; }
public void draw(Graphics g) { g.drawRect(x, y, width, height); } }
2.编写一个浏览 Applet 应用程序的页面文件 KY3_2.HTML
3. 将 KY3_2.java 源程序编译为 KY3_2.class 文件
4. 使用浏览器或使用小程序查看器浏览KY3_2.HTML文件(即在命令提示符下输入:appletviewer KY3_2.HTML),运行.
思考:程序的结构。类与对象的关系。对象创建、使用、销毁的过程。
(三)编写显示当前日期和时间的程序
1. 编写Applet 类文件KY3_3.java ? 程序功能:该程序通过使用一个自定义类Time,实现显示当前日期和时间的功能 ? KY3_3.java 程序源代码如下。 import java.awt.Graphics; import java.applet.Applet; import java.util.Calendar; class Time {
- 16 -
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+\年\月\日\}
public String getTime() {
String s=hh+\时\分\秒\return s; } }
public class KY3_3 extends Applet { Time t=new Time();
public void paint(Graphics g) {
g.drawString(\当前日期:\g.drawString(\当前时间:\} }
2. 编写浏览KY3_3 类的页面文件KY3_3.html
3. 在浏览器中浏览程序运行结果。
(四)使用修饰符
有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符如下。Public,private,protected,package,static,final,transient,volatile
1. 程序功能:通过两个类StaticDemo、KY3_4 说明静态变量/方法与实例变量/方法的区别。 2. 编写类文件KY3_4.java,程序源代码如下。
class StaticDemo { static int x; int y;
public static int getX() { return x;
- 17 -
}
public static void setX(int newX) { x = newX; }
public int getY() { return y; }
public void setY(int newY) { y = newY; } }
public class KY3_4 {
public static void main(String[] args) {
System.out.println(\静态变量x=\
System.out.println(\实例变量y=\非法,编译时将出错 StaticDemo a= new StaticDemo(); StaticDemo b= new StaticDemo(); a.setX(1); a.setY(2); b.setX(3); b.setY(4);
System.out.println(\静态变量a.x=\System.out.println(\实例变量a.y=\System.out.println(\静态变量b.x=\System.out.println(\实例变量b.y=\} }
3. 对上面的源程序进行编译,排错并运行
(五)方法中参数传递的练习
1. 编写一个传值调用的程序文件KY3_5.java。 ? 程序功能:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方式调用方法ff1
对x 和y 做乘方及输出x 和y 的乘方值,最后再输出x 和y 的乘方值。 ? 程序源代码如下。
class KY3_5 {
public static void main(String[] args) { int x=10, y=10; ff1(x, y);
System.out.println(\}
static void ff1(int passX, int passY) { passX=passX*passX; passY=passY*passY;
System.out.println(\
- 18 -