Java课作业(三) 继承与多态

实验三 继承与多态

1利用继承来设计一组用于几何图形处理的类。

  • 定义几何图形类Shape,该类具有计算几何图形面积area()、周长perimeter(),以及返回几何图形信息toString()的方法。说明:Shape类是描述抽象的几何形状,所以其面积、周长以及toString()方法的方法体无法定义具体的语句仅设置return返回语句即可。
  • 定义Shape的表示圆的子类——Circle,该类包含表征圆的属性,属性的setter和getter方法,创建和初始化对象的构造方法(体现重载)以及重写Shape的3个成员方法。
  • 和getter方法,创建和初始化对象的构造方法(体现重载)以及重写Shape的3个成员方法。
  • 最后定义测试类TestShape,用来测试上述设计的类中各个方法功能。
package Work3;

import java.util.Scanner;

import static java.lang.Math.*;


class Shape{//图形类
        public double perimeter() {
            return 1;
        }//计算几何图形周长
        public double area() {
            return 1;
        }//计算几何图形面积
        public void setWidth(double newWidth){return ;}
        public double getWidth(){return 1;}
        public void setLength(double newLenth){return ;}
        public double getLength(){return 1;}
        public void setRadius(double newr){return ;}
        public double getRadius(){return 1;}
    }


    //表示长方形的子类——Rectangle
    class Rectangle extends Shape{
        double length;//长
        double width;//宽

        public Rectangle(double length,double width) {//构建新的长方形
            this.length=length;
            this.width=width;
        }


        public double getLength() {
            return length;
        }//获得长

        public void setLength(double newLenth) {
            length = newLenth;
        }//重置长



        public double getWidth() {
            return width;
        }//获得宽

        public void setWidth(double newWidth) {
            width = newWidth;
        }//重置宽



        public double perimeter() {
            return 2.0*(length+width);
        }//输出周长
        public double area() {
            return length*width;
        }//输出面积捏

        @Override
        public String toString() {
            return "Rectangle{" +
                    "length=" + length +
                    ", width=" + width +
                    '}';
        }
    }

    //表示圆的子类——Circle
    class Circle extends Shape{
        double r;//半径
        public Circle(double newr) {
            r =newr;
        }//构建一个新圆

       //文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处
        public double getRadius() {
            return r;
        }//获取半径

        public void setRadius(double newr) {
            r = newr;
        }//重置半径



        public double perimeter() {
            return 2.0* PI* r;
        }//算周长
        public double area() {
            return PI* r * r;
        }//算面积

        @Override
        public String toString() {
            return "Circle{" +
                    "r=" + r +
                    '}';
        }
    }
    public class TestShape{
        public static void main(String[] args) {
            System.out.println("请输入长方形的长和宽,圆形的半径:");
            Scanner scan=new Scanner(System.in);//  创建一个scanner
            Shape rectangle=new Rectangle(scan.nextDouble(),scan.nextDouble());//新建一个长方形,并且输入他的长和宽
            Shape circle=new Circle(scan.nextDouble());//新建一个圆,并且输入他的长和宽

            System.out.println("长方形的信息:"+rectangle.toString());//输出详细信息
            System.out.println("圆的信息:"+circle.toString());
            System.out.println("输出长方形的宽"+rectangle.getWidth());


            System.out.println("更改长方形的长");
            rectangle.setLength(scan.nextDouble());
            System.out.println("更改长方形的宽");
            rectangle.setWidth(scan.nextDouble());
            System.out.println("更改圆的半径");
            circle.setRadius(scan.nextDouble());

            System.out.println("输出长方形的长"+rectangle.getLength());

            System.out.println("长方形的周长:"+rectangle.perimeter()+"长方形的面积:"+rectangle.area());
            System.out.println("圆的周长:"+circle.perimeter()+"圆的面积:"+circle.area());





            scan.close();
        }
    }


2.基于第1题定义测试类,利用多态来实现几何图形对象的赋值和引用。

  • 首先定义一个Shape类的数组(含3个元素)s,其中s[0]为Shape类对象,s[1]为Circle类对象,s[2]为Rectangle类对象
  • 利用for循环调用s[i].toString()打印输出每个类对象的信息。
package Work3;

public class ArrayShape {
    public static void main(String[] args) {
        Shape s[] = new Shape[3];

        s[0] = new Shape();
        s[1] = new Rectangle(2,3);
        s[2] = new Circle(5);
//文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处
        for (int i = 0; i < 3; i++){
            System.out.println(s[i].toString());
        }
    }
}

3.定义复数类Plurality并设计加减法

  • 该类包含表征复数的属性,属性的setter和getter方法,
  • 创建和初始化对象的构造方法(体现重载),
  • 实现复数加、乘运算方法(体现方法重载)
  • 以及返回复数格式x+iy的toString()(重写Object类中toString())方法。
  • 最后编写测试类TestPlurality去验证创建复数类的功能。
package Work3;
import java.util.Scanner;

public class TestPlurality {
    Scanner scan = new Scanner(System.in);
    private double real1,real2;//两个实部
    private double image1,image2;//两个虚部
    private double plusReal,plusImage, subReal, subImage;//实部相加,虚部相加,实部相减,虚部相减。

    
    public double getImage1() {
        return image1;
    }//查询实数1的虚部

    public double getImage2() {
        return image2;
    }//查询实数2的虚部

    public double getReal1() {
        return real1;
    }//查询实数1的实部

    public double getReal2() {
        return real2;
    }//查询实数2的实部

    public double getPlusReal() {
        return plusReal;
    }//查询实部相加

    public double getPlusImage() {
        return plusImage;
    }//查询虚部相加

    public double getSubReal() {
        return subReal;
    }//查询实部相减

    public double getSubImage() {
        return subImage;
    }//查询虚部相减

    public void setPlusReal(double plusReal) {
        this.plusReal = plusReal;
    }

    public void setPlusImage(double plusImage) {
        this.plusImage = plusImage;
    }

    public void setSubImage(double subImage) {
        this.subImage = subImage;
    }

    public void setSubReal(double subReal) {
        this.subReal = subReal;
    }
//文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处
    public void setImage1(double image1) {
        this.image1 = image1;
    }

    public void setImage2(double image2) {
        this.image2 = image2;
    }

    public void setReal1(double real1) {
        this.real1 = real1;
    }

    public void setReal2(double real2) {
        this.real2 = real2;
    }


    @Override
    public String toString() {
        return "TestPlurality{" +
                ", real1=" + real1 +
                ", real2=" + real2 +
                ", image1=" + image1 +
                ", image2=" + image2 +
                ", plusReal=" + plusReal +
                ", plusImage=" + plusImage +
                ", subReal=" + subReal +
                ", subImage=" + subImage +
                '}';
    }
    public String ToString(){
        System.out.println("请依次输入第一个数的实部,虚部;第二个数的实部,虚部:");
        //本文来自博客园,作者:晓梦ペ,转载请注明原文链接:https://www.cnblogs.com/nekodream/p/16837590.html
        real1 = scan.nextDouble();
        image1 = scan.nextDouble();
        real2 = scan.nextDouble();
        image2 = scan.nextDouble();
        plusReal = real1+real2;
        plusImage = image1+image2;
        subReal = real1-real2;
        subImage = image1-image2;
        if (subImage <0){
            return ("和为"+plusReal+"+"+plusImage+"i"+"差为"+(subReal)+(subImage)+"i");
        }//负数自带负号,正数要额外加+。
        return ("和为"+plusReal+"+"+plusImage+"i"+"差为"+(subReal)+"+"+(subImage)+"i");
    }

    public static void main(String[] args) {
        TestPlurality ans = new TestPlurality();
        System.out.println(ans.ToString());
        System.out.println(ans.toString());
    }
}






5c8702262e8eaeded963b80c594761ee342039238

posted @ 2022-10-28 21:27  晓梦ペ  阅读(224)  评论(0)    收藏  举报