联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> Java编程Java编程

日期:2018-04-28 09:27

《java程序设计》课程实验报告

实验四 继承与多态

一、实验目的及要求

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

2、掌握类的继承关系和派生方法。

3、掌握多态的概念与使用。

4、掌握接口的定义与使用。

二、实验内容

(一)类的继承性练习

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

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

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

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

2.编写两个程序文件KY4_1.java和KY4_2.java,实现类的继承。

3.KY4_1.java的代码如下:

       public class KY4_1

       {

           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_1.java,产生类文件 KY4_1.class。注意:暂时不运行程序KY4_2.class。

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

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

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

要求: 将程序的源代码、运行结果写在实验报告上。


(二)掌握上转型对象的使用,理解不同对象的上转型对象调用同一方法可能产生不同的行为(多态)。

上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法(此时等价于子类对象去调用这些方法。)如果子类重写了父类的某个实例方法后,对象的上转型对象调用的这个实例方法一定是子类重写的实例方法)。

1.编写一个abstract类,类名为Geometry,该类有一个abstract方法。

public double area();

2.编写Geometry的若干个子类,比如Circle子类和Rect子类。

3.编写Student类,该类定义一个public double area(Geometry ...p)方法,该方法的参数是可变参数,即参数的个数不确定,但类型都是Geometry。该方法返回参数计算的面积之和。

4.在主类MainClass的main方法中创建一个Student对象,让该对象调用

public double area(Geometry ...p)计算若干个矩形和若干个圆的面积之和。

Geometry.java

public abstract class Geometry{

public abstract double getArea( );

}


Rect.java

public class Rect extends Geometry {

   double a,b;

   Rect(double a,double b) {

       this.a = a;

       this.b = b;

   }

  【代码1】 //重写 getArea()方法,返回矩形面积

}

Circle.java

public class Circle extends Geometry {

   double r;

   Circle(double r) {

       this.r = r;

   }

   【代码2】 //重写 getArea()方法,返回圆面积

}


Student.java

public class Student {

   public double area(Geometry ...p) {

      double sum=0;

      for(int i=0;i<p.length;i++) {

          sum=sum+p[i].getArea();

      }

      return sum;

   }

}


MainClass.java

public class MainClass{

  public static void main(String args[]) {

     Student zhang = new Student();

     double area =

     zhang.area(new Rect(2,3),new Circle(5.2),new Circle(12));

     System.out.printf("2个圆和1个矩形图形的面积和:\n%10.3f",area);

  }

}  

实验内容要求:将【代码】部分替换为java程序代码,成为完整的程序并将程序的源代码、运行结果写在实验报告上。

(三)面向接口编程

    接口回调是多态的另一种体现。接口回调是指可以把使用某一接口的类创建的对象的引用赋给该接口变量,那么该接口变量就可以调用被类实现的接口中的方法,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法。所谓面向接口编程,是指当设计某个重要的类时,不让该类面向具体的类,而是面向接口。即设计类中的重要数据是接口声明的变量,而不是具体类声明的对象。

天气可能出现不同的状态,要求用不同的接口封装天气的状态。

具体要求如下:

1.编写接口WeatherState,该接口有一个名字为void showState()的方法。

2.编写Weather类,该类中有一个WeatherState声明的变量state。另外,该类有一个show()方法,在该方法中让接口state回调showState()的方法。

3.编写若干个实现WeatherState接口的类,负责刻画天气的各种状态。

4.编写主类,在主类中进行天气预报。

WeatherState.java

public interface WeatherState {   //接口

   public void showState();

}

Weather.java

public class Weather {

  WeatherState  state;

  public void show() {

     state.showState();

  }

  public void setState(WeatherState s) {

     state = s;

  }

}

WeatherForecast.java

public class WeatherForecast {  //主类

  public static void main(String args[]) {

     Weather weatherBeijing =new Weather();

     System.out.print("\n今天白天:");

     weatherBeijing.setState(new CloudyDayState());

     weatherBeijing.show();

     System.out.print("\n今天夜间:");

     weatherBeijing.setState(new LightRainState());

     weatherBeijing.show();

     System.out.print("转:");

     weatherBeijing.setState(new HeavyRainState());

     weatherBeijing.show();

     System.out.print("\n明天白天:");

     weatherBeijing.setState(new LightRainState());

     weatherBeijing.show();

     System.out.print("\n明天夜间:");

     weatherBeijing.setState(new CloudyLittleState());

     weatherBeijing.show();

  }

}

CloudyLittleState.java

public class CloudyLittleState implements WeatherState {

   public void showState() {

      System.out.print("少云,有时晴.");

   }

}

CloudyDayState.java

public class CloudyDayState implements WeatherState {

   【代码1】 //重写public void showState()

}

HeavyRainState.java

public class HeavyRainState implements WeatherState{

   【代码2】 //重写public void showState()

}

LightRainState.java

public class LightRainState implements WeatherState {

   【代码3】 //重写public void showState()方法

}


实验内容要求:将【代码】部分替换为java程序代码。将程序的源代码、运行结果写在实验报告上。

三、实验设备与环境

windows7及以上系统,安装eclipse+JDK

四、实验过程和结果

五、实验总结


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp