Polimorfismo

De Aulas

Voltar para Programação em Java

Enunciado

Considere que um ponto possui duas informações, x e y. Uma figura geométrica, por exemplo um retângulo, é composto por dois pontos, o ponto superior esquerdo e o ponto inferior direito. Faça uma classe que representa um retângulo. Agora crie uma classe para um retângulo que pode ser preenchido com uma cor. Nesse caso é importante passar uma informação dizendo a cor para se preencher esse retângulo preenchido. Considere a seguinte figura.

Heranca exercicio figuras.png

Faça um programa que crie um retângulo e um retângulo preenchido com uma cor. Não precisa ser visual, apenas deve mostrar as informações das figuras geométricas.

Classe Ponto

 1public class Ponto {
 2	private int x;
 3	private int y;
 4	
 5	public Ponto() {
 6		x = 0;
 7		y = 0;
 8	}
 9	
10	public Ponto(int x, int y) {
11		this.x = x;
12		this.y = y;
13	}
14	
15	public void setX(int x) {
16		this.x = x;
17	}
18	
19	public int getX() {
20		return x;
21	}
22	
23	public void setY(int y) {
24		this.y = y;
25	}
26	
27	public int getY() {
28		return y;
29	}
30	
31	public String toString() {
32		return "(" + x + ", " + y + ")";
33	}
34}

Classe Retangulo

 1public class Retangulo {
 2	private Ponto pontoA;
 3	private Ponto pontoB;
 4	
 5	public Retangulo(Ponto pa, Ponto pb) {
 6		pontoA = pa;
 7		pontoB = pb;
 8	}
 9	
10	public void setPontoA(Ponto pa) {
11		pontoA = pa;
12	}
13	
14	public Ponto getPontoA() {
15		return pontoA;
16	}
17	
18	public void setPontoB(Ponto pb) {
19		pontoB = pb;
20	}
21	
22	public Ponto getPontoB() {
23		return pontoB;
24	}
25	
26	public String toString() {
27		return "Retangulo [" + pontoA + ", " + pontoB + "]";
28	}
29}

Classe RetanguloPreenchido

 1public class RetanguloPreenchido extends Retangulo {
 2	private String cor;
 3	
 4	public RetanguloPreenchido(Ponto a, Ponto b, String cor) {
 5		super(a, b);
 6		this.cor = cor;
 7	}
 8	
 9	public void setCor(String cor) {
10		this.cor = cor;
11	}
12	
13	public String getCor() {
14		return cor;
15	}
16	
17	public String toString() {
18		return super.toString() + " Cor(" + cor + ")";
19	}
20}

Programa Principal (para testes)

 1public class Principal {
 2	public static void main(String[] args) {
 3		Ponto a = new Ponto(23, 3);
 4		System.out.println(a);
 5		
 6		Retangulo ret = new Retangulo(
 7								new Ponto(10, 20),
 8								new Ponto(125, 300));
 9		System.out.println(ret);
10		
11		RetanguloPreenchido retp = new RetanguloPreenchido(
12								new Ponto(),
13								new Ponto(30, 30),
14								"Amarelo");
15		System.out.println(retp);
16	}
17}

Programa Poli

 1public class Poli {
 2	public static void main(String[] args) {
 3		Retangulo [] vetor = new Retangulo[4];
 4		
 5		vetor[0] = new Retangulo(
 6					new Ponto(),
 7					new Ponto(34, 56));
 8		vetor[1] = new Retangulo(
 9					new Ponto(400, 500),
10					new Ponto(500, 700));
11		vetor[2] = new RetanguloPreenchido(
12					new Ponto(23, 56),
13					new Ponto(40, 70),
14					"Vermelho");
15		vetor[3] = new RetanguloPreenchido(
16					new Ponto(),
17					new Ponto(1000, 2000),
18					"Preto");
19		
20		for (int i = 0; i < vetor.length; i++) {
21			System.out.println(vetor[i]);
22		}
23		System.out.println("-----------------");
24		for (int i = 0; i < vetor.length; i++) {
25			vetor[i].getPontoB().setX(0);
26		}
27		for (int i = 0; i < vetor.length; i++) {
28			System.out.println(vetor[i]);
29		}
30		System.out.println("-----------------");
31		for (int i = 0; i < vetor.length; i++) {
32			if (vetor[i] instanceof RetanguloPreenchido) {
33				RetanguloPreenchido p =
34					(RetanguloPreenchido) vetor[i];
35				p.setCor("Branco");
36			}
37		}
38		for (int i = 0; i < vetor.length; i++) {
39			System.out.println(vetor[i]);
40		}
41	}
42}