《面向对象程序设计》实验指导书 下载本文

备份的其它文件夹或Java源文件要使用Eclipse管理,也必须导入硬盘的Eclipse工作空间,但工作空间中必须有适当的项目和包来存放它们,如果没有,就必须按照前面所述的方法首先建立项目和包。现在我们在Eclipse下再次删除并重新建立项目MyProject和包myPackage,然后在“包资源管理器”中将光标定位在包myPackage上,执行“文件-导入”菜单命令,在弹出的对话框中选择“常规-文件系统”,点击“下一步”,在弹出的对话框中点击“浏览”,在“从目录中导入”对话框中找到备份文件夹MyProject,展开并进入其中的src文件夹,将光标定位在存放包的文件夹myPackage上,点击“确定”,在弹出的对话框的上部右栏选中源文件HelloWorld.java,再点击“完成”,即可将该源文件导入项目和包。

实验二 类的封装、继承与多态实验

一、实验目的

1.通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想。 2.了解类的封装方法,以及如何创建类和对象。 3.了解成员变量和成员方法的特性。 4.掌握面向对象程序设计的方法。 5.掌握类的继承和多态的作用。 二、实验要求

1.编写一个体现面向对象思想的程序。

2.编写体现类的继承性(成员变量,成员方法、成员变量隐藏)的程序。 3.编写体现类的多态性(成员方法重载、构造方法重载)的程序。 三、实验内容

(一)编写一个体现面向对象思想的程序。 (1)程序功能:求某个数的若干次幂 (2)程序源代码如下: class P { int a,b,pwr; P(int i,int j) { a=i; b=j; pwr=1; for(;j>0;j--) pwr*=i; } int Getpwr() { return pwr; } }

public class power { public static void main(String[] args) { P p1=new P(5,3); P p2=new P(17,2); System.out.println(p1.a+\的\幂等于\ System.out.println(p2.a+\的\幂等于\ } }

(3)编译power.java,产生类文件power.class。 (4)运行该程序

(二)编写一个体现类的继承性的程序。 1.继承的概念

新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。

当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。

Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。 2.创建父类

(1)编写程序文件father.java,源代码如下: public class father { protected String xm; //具有保护修饰符的成员变量 protected int xh;

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

xm =m; xh = h; }

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

System.out.println(xm+\ } }

3.创建继承的类

(1)程序功能:通过父类father产生子类son,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。在程序中调用了父类的print方法,同时可以看出子类也具有该方法。

(2)编写程序文件son.java,源代码如下: public class son extends father { protected String xy; protected String xi;

public static void main(String args[]) {

father f1 = new father(); f1.setdata(\张三\ f1.print();

son s1 = new son() ;

s1.setdata(\李四\调用父类的成员方法

s1.xy=\信息工程系\ //访问本类的成员变量 s1.xi=\汽车系\ //访问本类的成员变量 s1.print();

System.out.print(s1.xm+\ } }

(3)编译并运行程序

注意:父类father与子类son要在同一文件夹(路径)内。 (三)编写一个体现类的多态性的程序。 1.理解类的多态性

类的继承发生在多个类之间,而类的多态只发生在同一个类上。在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。这种现象称为类的多态。

多态使程序简洁,为程序员带来很大便利。在OOP中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。

类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。 2.成员方法的重载

成员方法的重载是指对同名方法的不同使用方式。

(1)程序功能:定义四个重载的成员方法,它们的方法名相同,但是参数个数或者数据类型不同,方法体也不同。在调用时根据实参的个数和数据类型进行选择。 (2)编写A.java文件,源代码如下。 public class D { public static void main(String[] args) { B b1=new B(); int i=b1.add(1,3); System.out.println(i); int j=b1.add(1,3,5); System.out.println(j); double m=b1.add(1.0,3.0); System.out.println(m); double n=b1.add(1.0,3.0,5.0); System.out.println(n); } }

class B { int add(int a,int b) { System.out.println(\ return a+b; } int add(int a,int b,int c)

{ System.out.println(\ return a+b+c; } double add(double a,double b) { System.out.println(\ return a+b; } double add(double a,double b,double c) { System.out.println(\ return a+b+c; } }

(3)编译并运行程序 3.构造方法的重载

构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。因此,构造方法不能直接调用,只能由new操作符调用。

构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。

(1)程序功能:定义三个重载的构造方法,它们的方法名相同,但是参数个数不同,方法体也不同。在调用时根据实参的个数进行选择。 (2)编写A.java文件,源代码如下。 public class A { public static void main(String[] args) { B b1=new B(); B b2=new B(5); B b3=new B(3,7); b1.print(); b2.print(); b3.print(); } }

class B { int a,b; B() { a=b=0; System.out.println(\