DEV Community

Criando uma hierarquia de vários níveis

Hierarquias de classes múltiplas:

  • Uma subclasse pode ser usada como superclasse de outra, formando uma hierarquia de múltiplos níveis.
  • Uma subclasse herda todas as características de suas superclasses. Por exemplo, a classe C herda de B, que herda de A, então C herda tanto de A quanto de B.

Exemplo de hierarquia:
O exemplo envolve três classes:
TwoDShape (classe base).
Triangle (subclasse de TwoDShape).
ColorTriangle (subclasse de Triangle).
A subclasse mais específica (ColorTriangle) herda atributos e métodos de todas as superclasses anteriores.

Classe TwoDShape:
Representa uma forma 2D com width (largura) e height (altura).
Construtores padrão, parametrizado e para dimensões iguais.
Métodos acessadores (getters e setters) para manipular largura e altura.
Método showDim() exibe as dimensões.

Classe Triangle:
Estende TwoDShape e adiciona um atributo style (estilo do triângulo).
Construtores: padrão, parametrizado (usando super() para inicializar a superclasse) e com um único argumento.

Métodos:
area() calcula a área do triângulo.
showStyle() exibe o estilo do triângulo.

Classe ColorTriangle:
Estende Triangle e adiciona um atributo color (cor do triângulo).
Construtor recebe cor, estilo, largura e altura.

Métodos:
getColor() retorna a cor.
showColor() exibe a cor.
Programa de exemplo Shapes6:

Cria dois objetos ColorTriangle com diferentes estilos e cores.
Exibe informações sobre estilo, dimensões, cor e área de cada triângulo.

class TwoDShape {
    private double width;
    private double height;

    // Construtor padrão
    TwoDShape() {
        width = height = 0.0;
    }

    // Construtor parametrizado
    TwoDShape(double w, double h) {
        width = w;
        height = h;
    }

    // Construtor com dimensões iguais
    TwoDShape(double x) {
        width = height = x;
    }

    double getWidth() { return width; }
    double getHeight() { return height; }
    void setWidth(double w) { width = w; }
    void setHeight(double h) { height = h; }

    void showDim() {
        System.out.println("Width and height are " + width + " and " + height);
    }
}

class Triangle extends TwoDShape {
    private String style;

    // Construtor padrão
    Triangle() {
        super();
        style = "none";
    }

    Triangle(String s, double w, double h) {
        super(w, h);  // Chama o construtor da superclasse
        style = s;
    }

    Triangle(double x) {
        super(x);  // Chama o construtor da superclasse
        style = "filled";
    }

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

    void showStyle() {
        System.out.println("Triangle is " + style);
    }
}

class ColorTriangle extends Triangle {
    private String color;

    ColorTriangle(String c, String s, double w, double h) {
        super(s, w, h);  // Chama o construtor da superclasse
        color = c;
    }

    String getColor() { return color; }

    void showColor() {
        System.out.println("Color is " + color);
    }
}

class Shapes6 {
    public static void main(String args[]) {
        ColorTriangle t1 = new ColorTriangle("Blue", "outlined", 8.0, 12.0);
        ColorTriangle t2 = new ColorTriangle("Red", "filled", 2.0, 2.0);

        System.out.println("Info for t1: ");
        t1.showStyle();
        t1.showDim();
        t1.showColor();
        System.out.println("Area is " + t1.area());
        System.out.println();

        System.out.println("Info for t2: ");
        t2.showStyle();
        t2.showDim();
        t2.showColor();
        System.out.println("Area is " + t2.area());
    }
}

Enter fullscreen mode Exit fullscreen mode

Principais pontos sobre herança e uso de super():
A classe ColorTriangle herda de Triangle, que herda de TwoDShape, reutilizando o código dessas classes.
O uso de super() permite chamar o construtor da superclasse diretamente.

Top comments (0)