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.
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}