📜  门| GATE-CS-2017(套装2)|第 50 题(1)

📅  最后修改于: 2023-12-03 14:58:32.192000             🧑  作者: Mango

题目介绍

本题为 GATE-CS-2017(套装2)中的第 50 题,考查面向对象编程思想和Java语言的基本知识。

题目描述

设有一个Java接口Shape,它有一个无参待实现的方法void draw(),表示该接口代表的形状要进行绘制操作。

又有一个Java抽象类TwoDShape,它实现了Shape接口,有两个私有成员变量double widthdouble height,表示该类代表的二维形状的宽度和高度。

现在,要定义两个Java类RectangleTriangle,分别继承自TwoDShape类,分别表示矩形和三角形。

请根据以上描述,编写符合要求的Java类。

思路说明

本题考查了Java语言中的面向对象编程思想和基础语法。

通过定义一个接口Shape和一个抽象类TwoDShape,实现了对绘制操作和二维形状的基本封装。

在继承TwoDShape类的过程中,通过定义不同的构造函数和重写绘制方法draw(),实现了对矩形和三角形这两种不同形状的拓展。

此外,通过在类定义中添加@Override注解,明确了该方法是对父类方法的重写。

代码实现

public interface Shape {
    void draw();
}

abstract public class TwoDShape implements Shape {
    private double width;
    private double height;

    public TwoDShape(double w, double h) {
        width = w;
        height = h;
    }

    public TwoDShape() {
        width = height = 0.0;
    }

    public TwoDShape(double x) {
        width = height = x;
    }

    public double getWidth() {
        return width;
    }

    public double getHeight() {
        return height;
    }

    public void setWidth(double w) {
        width = w;
    }

    public void setHeight(double h) {
        height = h;
    }

    abstract public double area();
}

class Rectangle extends TwoDShape {
    public Rectangle() {
        super();
    }

    public Rectangle(double w, double h) {
        super(w, h);
    }

    public Rectangle(double x) {
        super(x);
    }

    @Override
    public double area() {
        return getWidth() * getHeight();
    }

    @Override
    public void draw() {
        System.out.println("Drawing Rectangle");
    }
}

class Triangle extends TwoDShape {
    public Triangle() {
        super();
    }

    public Triangle(double w, double h) {
        super(w, h);
    }

    public Triangle(double x) {
        super(x);
    }

    @Override
    public double area() {
        return getWidth() * getHeight() / 2;
    }

    @Override
    public void draw() {
        System.out.println("Drawing Triangle");
    }
}

以上是符合要求的Java类的实现代码,需要注意的是,要分别实现接口Shape和抽象类TwoDShape的所有方法,并在RectangleTriangle类中重写draw()方法。