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());
}
}
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)