java实验4

实验名称   第四次实验:修饰符与继承性  

一、实验目的:

了解如何使用类及其成员的修饰符,理解类的继承性,掌握方法的继承、重载和覆盖。

二、实验要求

1. 编写如何使用类及其成员的修饰符的程序。

2. 编写如何通过传递参数来调用方法的程序。

3. 编写体现类的继承性(成员变量、成员方法的继承)的程序。

三、实验内容:

   (一)使用修饰符

有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目。常用的修饰符有:publicprivateprotectedpackagestaticfinalabstract等。

1. 程序功能:通过两个类 StaticDemoKY4_1 说明类变量与对象变量,以及类方法与对象方法的区别。

2. 编写源程序 KY4_1.java,程序源代码如下。

class StaticDemo {

static int x;

int y;

public static int getX() {

return x;

}

public static void setX(int newX) {

x = newX;

}

public int getY() {

return y;

}

public void setY(int newY) {

y = newY;

}

}

 

public class KY4_1 {

public static void main(String[] args) {

System.out.println("类变量x="+StaticDemo.getX());

System.out.println("对象变量y="+StaticDemo.getY());  

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="+a.getX());

System.out.println("对象变量a.y="+a.getY());

System.out.println("类变量b.x="+b.getX());

System.out.println("对象变量b.y="+b.getY());

}

}

3. 编译并运行程序 KY4_1.java,看看该程序是否有错?如果有错请在实验报告中指出出错的地方,出错的原因,并给出修改意见以及程序正确运行的结果。

 该程序有出错。

class StaticDemo {

static int x;

int y;

public static int getX() {

return x;

}

public static void setX(int newX) {

x = newX;

}

public int getY() {

return y;

}

public void setY(int newY) {

y = newY;

}

}

public class KY4_1 {

public static void main(String[] args) {

StaticDemo kk=new StaticDemo();

System.out.println("类变量x="+StaticDemo.getX());

System.out.println("对象变量y="+kk.getY());  

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="+a.getX());

System.out.println("对象变量a.y="+a.getY());

System.out.println("类变量b.x="+b.getX());

System.out.println("对象变量b.y="+b.getY());

}

}



(二)方法中参数传递的练习

1. 编写一个程序文件KY4_2.java

2. 程序功能如下:有一个主方法main() 以及一个求平方和的方法int square(int x, int y)square方法计算参数x y的平方和,并返回该平方和值。在主方法main中定义两个整型变量,并给它们赋一个初值,然后使用这两个变量作为实际参数来调用square方法,求出平方和,最后输出平方和。

3. 请将程序KY4_2.java的源代码写在实验报告中。

public class KY4_2 {

int square(int x,int y){

int square;

square=x*x+y*y;

return square;

}

public static void main(String[] args) {

KY4_2 k=new KY4_2();

int a=1,b=2,c;

c=k.square(a, b);

System.out.println(c);

 

}

 

}

 

 

   

(三)类的继承性练习

1. 进一步理解继承的含义

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

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

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

 

2.编写两个程序文件KY4_3.javaKY4_4.java,实现类的继承。

3KY4_3.java的代码如下:

        public class KY4_3 

        {

            protected String xm;                     //姓名

            protected int xh;                        //学号

            void setdata(String m,int h)              //该方法为姓名和学号赋初始值

            {

                xm =m;

                xh = h;

            }

            public void print()          //输出学生的姓名和学号

            {

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

            }

        }

    4.编译 KY4_3.java,产生类文件 KY4_3.class。注意:暂时不运行程序KY4_3.class

5.编写一个程序文件KY4_4.java。程序功能如下:子类KY4_4继承父类 KY4_3,其不仅具有父类的成员变量 xm(姓名)、xh(学号),还定义了新的成员变量 xy(学院)、xi(系)。在子类KY4_4中重写了父类的方法print(),在该方法中不仅输出学生的姓名和学号,而且还输出学生的学院和系。另外,在子类KY4_4中还定义了一个主方法main。首先,在主方法中创建一个父类 KY4_3的对象f,设置f的姓名为"帅零",学号为"12321",并且调用print()方法输出对象f的姓名和学号。接着,在主方法中创建一个子类 KY4_4的对象s,设置s的姓名为"郭娜",学号为"12345",学院为"经济管理学院",系为"信息管理系",并且调用print()方法输出对象s的姓名,学号,学院和系。

   6.编译并运行程序KY4_4.java。请将KY4_4的源程序以及运行结果写在实验报告中。

注意:父类 KY4_3 与子类 KY4_4要在同一文件夹(路径)内。

 public class KY4_4 extends KY4_3 {

protected String xy;

protected String xi;

public void print(){

System.out.println(xm);

System.out.println(xh);

System.out.println(xy);

System.out.println(xi);

}

 

public static void main(String[] args) {

KY4_3 f=new KY4_3();

f.setdata("帅零",12321);

f.print();

KY4_4 s=new KY4_4();

        s.setdata("郭娜", 12345);

        s.xy="经济管理学院";

        s.xi="信息管理系";

        s.print();

}

 

}

 

 

四、思考题

1. 说明类的继承和多态都有什么作用?

继承就是子类继承父类,使子类具有父类的各种属性和方法,好处就是避免多余的代码出现.
多态就是一个接口,使用不同的实例去执行不同的操作,好处就是增强程序的可扩展性及可维护性.

四、心得体会:

  通过本次实验,明白了继承与多态的作用以及该注意事项,更清晰的了解到了继承与多态的使用.

 

 

Java程序设计》课程实验指导书程序代码(答案)(实验四:java继承与多态),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验java继承与多态 一、实验目的: 掌握继承、多态的概念与实现方法; 掌握包和接口的定义和使用方法; 了解JAVA语言实现多继承的途径; 二、实验内容: 1.分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要: (1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化。 (2)Point2D有一个void型成员方法offset(int a, int b),它可以实现Point2D的平移。 (3)Point3D是Point2D的直接子类,它有有三个整型成员变量x,y,z (分别为三维空间的X,Y,Z方向坐标),Point3D有两个构造方法:Point3D(int x,int y,int z)和Point3D(Point2D p,int z),两者均可实现对Point3D的成员变量x, y,z的初始化。 (4)Point3D有一个void型成员方法offset(int a, int b,int c),该方法可以实现Point3D的平移。 (5)在Point3D中的函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point2D的对象p3d1,p3d2,打印出他们之间的距离。 2.定义抽象类Shape,抽象方法为showArea(),出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法出各自的面积,在main方法中构造3个对象,调用showArea方法。 定义接口DiagArea,其中包含方法double getDiagonal()对角线长, double getArea()面积,定义一个矩形类,实现此接口,并自行扩充成员变量和方法,定义一个正方形类继承矩形类(如矩形有长w和宽h,正方形有边x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线长),在另一类中的方法里使用测试该类。 三、实验: 1. 能实现类的继承关系; 2. 用多种方法创建各个类的对象; 3. 程序应包括各个被调用方法的执行结果的显示。 4. 写出实验报告。要记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义Point2D,及定义它的属性和方法; 定义子类Point3D,及定义它的属性和方法;在Point3D中的函数main()中实例化两个Point2D的对象,并通过这两个对象调用它们的属性和方法,输出方法执行结果。 2.(第2题)定义抽象类Shape,抽象方法为showArea(),再定义矩形类Rectangle,正方形类Square,圆类 Circle,和各自的属性。定义类、方法,在main方法中构造3个对象,调用showArea方法;定义接口DiagArea,其中包含方法double getDiagonal(),在main方法中输出方法执行结果。 五、自做作实验 1.定义一个描述人的基本类,该类包括人的性别和出生日期两个数据成员,以及设置和获取这些属性值的方法成员;再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程序,完成一个具有班级学生信息管理功能的程序。 2创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成Star对象)。然后将Vector中元素依次取出,判断其是否为Star类。如是返回其是个Star。否则返回其面积。 3..学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的管理和对教师的管理在他们身上都有体现。 1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。其中,StudentInterface接口包括setFee()方法和getFee()方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay()方法和getPay()方法,分别用于设置和获取教师的工资 2) 定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。 3) 创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。 提示: 1)定义两个接口,分别在其中申明两个方法。 2)定义类Graduate,实现这两个接口。 3)定义类的成员变量,和构造方法。 4)给出四个接口方法的实现。 5)给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出是否需要贷款的信息。 6)写main方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是否需要贷款的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ifHappyEveryDay@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值