• 实验四 继承和接口


    实验四 继承和接口

    一、实验目的

    1.能实现类的继承关系;

    2.用多种方法创建各个类的对象;

    二、实验内容

    完成如下任务或编写能够满足如下条件的程序:

    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方法。

    3.定义接口DiagArea,其中包含方法double getDiagonal()求对角线长,double getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成员变量和方法,定义一个正方形类继承矩形类(如矩形有长w和宽h,正方形有边x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线长),在另一类中的主方法里使用测试该类。

    package shiyan4_1;

    class Point2D {

           protected int x, y;// 保护类成员主要用于继承

           Point2D() {

           }

           Point2D(int x, int y) {// 有参构造方法

                  this.x = x;

                  this.y = y;

           }

           public int getX() {

                  return x;

           }

           public int getY() {// 方便在其他类中使用该类中的私有成员变量

                  return y;

           }

           public void offset(int a, int b) {// 偏移后的横纵坐标值

                  this.x += a;

                  this.y += b;

           }

           public void show() {// show横纵坐标

                  System.out.println("坐标为:[" + x + "," + y + "]");

           }

    }

    class Point3D extends Point2D {// 类的继承

           private int z;// 第三点x

           Point3D() {

           }

           Point3D(int x, int y, int z) {// 有参构造方法三点分别初始化

                  super(2, 3);// 调用父类的有两个参数的构造方法

                  this.z = z;

           }

           public int getZ() {

                  return z;

           }

           Point3D(Point2D p, int z) {// 有参构造方法,以对象作形参.用p对象调用get方法以初始化继承的私有成员变量

                  super(p.getX(), p.getY());

                  this.z = z;

           }

           public void offset(int a, int b, int c) {// 3D的偏移量

                  super.offset(a, b);// 方法同上,调用父类的偏移方法

                  z = z + c;

           }

           public void show() {// show3D坐标值

                  System.out.println("坐标为:[" + x + "," + y + "," + z + "]");

           }

    }

    public class shiyan4_1 {

           public static void main(String[] args) {

                  Point2D p2d1 = new Point2D(2, 3);

                  p2d1.show();

                  Point2D p2d2 = new Point2D(3, 4);// 初始化2D两点p2d1,p2d2

                  p2d2.show();

                  double retDistance2D = distance2D(p2d1, p2d2);

                  System.out.println("距离为:"+retDistance2D);// 输出2D两点之间距离

                  Point3D p3d1 = new Point3D(2, 3, 4);

                  p3d1.show();

                  Point3D p3d2 = new Point3D(3, 4, 5);

                  p3d2.show();

                  double retDistance3D = distance3D(p3d1, p3d2);

                  System.out.println("距离为:"+retDistance3D);// 同上面的2D

           }

           public static double distance2D(Point2D p2d1, Point2D p2d2) {// 对象作形参

                  double distance;

                  double distanceX;

                  double distanceY;

                  distanceX = Math.pow((p2d1.getX() - p2d2.getX()), 2);// (x1-x2)2=X

                  distanceY = Math.pow((p2d1.getY() - p2d2.getY()), 2);// (y1-y2)2=Y

                  distance = Math.sqrt(distanceY + distanceX);// X+Y再开方

                  return distance;

           }

           public static double distance3D(Point3D p3d1, Point3D p3d2) {// 同2D方法一致

                  double distance;

                  double distanceX;

                  double distanceY;

                  double distanceZ;

                  distanceX = Math.pow((p3d1.getX() - p3d2.getX()), 2);

                  distanceY = Math.pow((p3d1.getY() - p3d2.getY()), 2);

                  distanceZ = Math.pow((p3d1.getZ() - p3d2.getZ()), 2);

                  distance = Math.sqrt(distanceY + distanceX + distanceZ);

                  return distance;

           }

    }

    package shiyan4_2;

    abstract class Shape {// 抽象类(一定有抽象方法,但不一定都是抽象方法)

           protected double area;

           abstract void showArea();// 抽象方法

    }

    class Rectangle extends Shape {// 类的继承

           private double x, y;

           Rectangle() {

           }

           Rectangle(double x, double y) {// 有参构造方法初始化

                  this.x = x;

                  this.y = y;

           }

           public double getX() {

                  return x;

           }

           public double getY() {

                  return y;

           }

           public void showArea() {// 计算面积并显示.showArea方法的重写

                  area = getX() * getY();

                  System.out.println("矩形的长为:"+x);

                  System.out.println("矩形的宽为:"+y);

                  System.out.println("矩形的面积为:"+area);

           }

    }

    class Square extends Shape {// 同上

           private double x;

           Square() {

           }

           Square(double x) {

                  this.x = x;

           }

           public double getX() {

                  return x;

           }

           public void showArea() {

                  area = getX() * getX();

                  System.out.println("正方形的边长为:"+x);

                  System.out.println("正方形的面积为:"+area);

           }

    }

    class Circle extends Shape {// 同上

           private double r;

           Circle() {

           }

           Circle(double r) {

                  this.r = r;

           }

           public double getR() {

                  return r;

           }

           public void showArea() {

                  area = 3.14 * getR() * getR();

                  System.out.println("圆的半径为:"+r);

                  System.out.println("圆的面积为:"+area);

           }

    }

    public class shiyan4_2 {

           public static void main(String args[]) {

                  Shape re = new Rectangle(2, 3);

                  re.showArea();

                  Shape sq = new Square(2);

                  sq.showArea();

                  Shape ci = new Circle(2);

                  ci.showArea();

           }

    }

    package shiyan4_3;

    abstract class Shape {

           abstract public void showArea();

    }

    class Rectangle extends Shape {

           protected int weight;

           protected int height;

           protected int s;

           public void showArea() {

                  this.s = this.weight * this.height;

                  System.out.println("矩形长为:"+weight);

                  System.out.println("矩形宽为:"+height);

                  System.out.println("矩形面积为:"+this.s);

                  System.out.println("矩形对角线长为:"+Math.sqrt((height*height+weight*weight)));

           }

           public Rectangle(int weight, int height) {

                  this.weight = weight;

                  this.height = height;

           }

    }

    class Square extends Shape {

           protected int weight;

           protected int s;

           public void showArea() {

                  this.s = this.weight * this.weight;

                  System.out.println("正方形边长为:"+weight);

                  System.out.println("正方形面积为:"+this.s);

                  System.out.println("正方形对角线长为:"+(Math.sqrt(2)*weight));

           }

           public Square(int weight) {

                  this.weight = weight;

           }

    }

    interface DiagArea {

           public double getDiagonal();

    }

    public class shiyan4_3 implements DiagArea {

           public double getDiagonal() {

                  return 0.2;

           }

           public static void main(String[] args) {

                  Rectangle re = new Rectangle(5, 7);

                  Square sq = new Square(8);

                  re.showArea();

                  sq.showArea();

           }

    }

  • 相关阅读:
    Lua/AHK socket tcp telnet
    Lua wait sleep
    Lua io.open read write seek flush setvbuf append
    stream file 文件 数据流
    AHK通讯 CMD Lua IPC
    零散 Lua/Excel/''/iup
    Windows Program File(x86) 路径 环境变量
    条件正则过滤筛选 V2
    条件正则过滤筛选 V1
    python导包出现的问题
  • 原文地址:https://www.cnblogs.com/fx0102/p/13196148.html
Copyright © 2020-2023  润新知