Java 之 实验十一 -- 继承与多态

实验十一

继承与多态

练习一

下列程序有错,请仔细阅读,找出错误并改正。
(1) abstract class Man{
(2) public String name;
(3) public void Man(String name){
(4) this.name=name;
(5) }
(6) public abstract void print(){ };
(7) }
(8) public class Test40 extend Man{
(9) public Test40(String name){
(10) super(name);
(11) }
(12) public void print(){
(13) System.out.println("name="+name);
(14) }
(15) public static void main(String[] args) {
(16) Test40 xm=new Test40("tom");
(17) xm.print();
(18) }
(19) }

第 3 行错误,改为 public Man(String name){
第 6 行错误,改为 public abstract void print();
第 8 行错误,改为 public class Test40 extends Man{

练习二 设计类继承

1. 编写一个抽象类(Shape),长方形、三角形和圆形均为其子类,并各有各的属性。其父类中有计算周长和面积的方法。在测试类中,分别建立如干个对象,计算并输出各对象的周长和面积。
2.
(1)设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,获取和设置x 和y值的public方法。
(2).设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的protected类型的成员变量r、获取和设置r值的public方法、计算圆面积的public方法。
(3).设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public方法。
(4).建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值。

实验要求:
. 每个类包含无参数和有参数的构造方法。构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。
.子类的构造方法调用父类的构造方法,对父类中的成员变量初始化。
.方法名自定;

TwoDimensionalPlane.java

package J11;

import java.awt.*;

class Point{
    protected int x;
    protected int y;

    public Point() {
        this.x = 0;
        this.y = 0;
    }
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
}

class Circle extends Point{
    protected int r;
    final double PI = Math.PI;

    public Circle() {
        super();
        this.r = 0;
    }

    public Circle(int x, int y, int r) {
        super(x,y);
        this.r = r;
    }

    public int getR() {
        return r;
    }

    public void setR(int r) {
        this.r = r;
    }

    public double areas() {
        return Math.round(Math.pow(r * Math.PI, 2));
    }
}

class Cylinder extends Circle{
    protected int h;

    public Cylinder(int x, int y, int r, int h) {
        super(x,y,r);
        this.h = h;
    }

    public int getH() {
        return h;
    }

    public void setH(int h) {
        this.h = h;
    }

    public double volume() {
        System.out.println("x="+x+",y="+y+",r="+r+",h="+h);
        return Math.round(areas() * h);
    }
}
public class TwoDimensionalPlane {
    public static void main(String[] args) {
        Cylinder c1 = new Cylinder(3,3,6,15);
        System.out.println("c1:volume=" + c1.volume());
        Cylinder c2 = new Cylinder(6,6,12,18);
        System.out.println("c2:volume=" + c2.volume());
        Cylinder c3 = new Cylinder(9,9,16,21);
        System.out.println("c3:volume=" + c3.volume());
    }
}

ZhouchangMianji.java

package J11;

abstract class Shape{
    public abstract double perimeter();
    public abstract double areas();
}

class RectAngle extends Shape{
    private double a;
    private double b;

    public RectAngle(double a, double b) {
        super();
        this.a = a;
        this.b = b;
    }

    @Override
    public double perimeter() {
        // TODO Auto-generated method stub
        return (a + b) * 2;
    }

    @Override
    public double areas() {
        // TODO Auto-generated method stub
        return a * b;
    }

    @Override
    public String toString() {
        return "RectAngle [perimeter = " + perimeter() + ", areas = " + areas() + "]";
    }
}

class TriAngle extends Shape{
    private double a;
    private double b;
    private double c;

    public TriAngle(double a, double b, double c) {
        super();
        this.a = a;
        this.b = b;
        this.c = c;
    }

    @Override
    public double perimeter() {
        // TODO Auto-generated method stub
        return a + b + c;
    }

    @Override
    public double areas() {
        // TODO Auto-generated method stub
        double s = (a + b + c) / 2;
        double areas = Math.sqrt(s * (s-a) * (s-b) * (s-c));
        return Math.round(areas);
    }

    @Override
    public String toString() {
        return "TriAngle [perimeter = " + perimeter() + ", areas = " + areas() + "]";
    }
}

class Circular extends Shape{
    private double r;
    final double PI = Math.PI;

    public Circular(double r) {
        super();
        this.r = r;
    }

    @Override
    public double perimeter() {
        // TODO Auto-generated method stub
        return Math.round(2 * PI * r);
    }

    @Override
    public double areas() {
        // TODO Auto-generated method stub
        return Math.round(Math.pow(r*PI, 2));
    }

    @Override
    public String toString() {
        return "Circular [perimeter = " + perimeter() + ", areas = " + areas() + "]";
    }
}

public class ZhouchangMianji {
    public static void main(String[] args) {
        RectAngle r1 = new RectAngle(10,12);
        System.out.println(r1.toString());
        TriAngle t1 = new TriAngle(12,16,20);
        System.out.println(t1.toString());
        Circular c1 = new Circular(16);
        System.out.println(c1.toString());
    }
}

End

posted @ 2023-09-18 17:52  Ivan丶ky  阅读(319)  评论(0)    收藏  举报