Para se mostrar a definição da subclasse, usa-se a sintaxe extends, e.g. “class Circle extends Shape”
O projeto dessa semana foca justamente nessa habilidade de herança. Foi construída uma superclasse Shape com os atributos aName e as funções getName e calculateArea (que, apenas em Shapes, retorna zero). Então fez-se as subclasses Circle, Square e Triangle, herdando todas as propriedades e funções de Shape, porém cada uma com os atributos específicos de sua forma geométrica, bem como uma redefinição da função calculateArea. Para isso, basta programar a função calculateArea dentro de cada subclasse, utilizando-se a extensão super.calculateArea caso queira-se chamar a função da superclasse Shape.
A redefinição foi feita para se poder chamar a função de todas as subclasses dentro de um único for, permitindo assim a fácil edição do funcionamento do programa. É desnecessário em uma aplicação tão simples, mas é análogo ao processo que permitiria a redefinição em programas muito maiores e mais complexos.
Segue agora o código completo, comentado.
1: public class Shape {
2: private String name;
3: Shape(String aName) {name=aName;} //propriedade do nome, inerente à todas as subclasses
4: public String getName() {return name;}
5: public float calculateArea() {return 0.0f;} //percebe-se aqui o funcionamento da redefinição de funções nas subclasses
6: public static void main (String argv[])
7: {
8: Circle C = new Circle("Circle C"); //Cria os objetos
9: Square S = new Square("Square S");
10: Triangle T = new Triangle("Triangle T");
11: Shape shapeArray[] = {C,S, T};
12: //aqui pode-se rodar funções completamente diferentes sob um mesmo nome (calculateArea) pois cada uma é chamada enquanto dentro do escopo de uma subclasse específica
13: for (int i=0; i System.out.println("The area of " + shapeArray[i].getName() + " is " + shapeArray[i].calculateArea() + " sq. cm.\n");
14: }
15: }
16: }
17: class Circle extends Shape {
18: private int radius;
19: Circle(String aName){
20: super(aName); //Super é chamado para usar a propriedade do pai
21: radius = 3;
22: }
23: public float calculateArea(){
24: float area;
25: area = (float) (3.14*radius*radius);
26: return area;
27: }
28: }
29: class Square extends Shape {
30: private int side;
31: Square(String aName){
32: super(aName);
33: side = 3;
34: }
35: public float calculateArea(){
36: int area;
37: area = side*side;
38: return area;
39: }
40: }
41: class Triangle extends Shape {
42: private int side1, side2;
43: private double angle;
44: Triangle(String aName){
45: super(aName);
46: side1 = 2;
47: side2 = 3;
48: angle = 30.0;
49: }
50: public float calculateArea() {
51: float area;
52: area = (float)(0.5*side1*side2*Math.sin(Math.toRadians(angle)));
53: return area;
54: }
55: }
Depois de executado, tem-se o output:
The area of Circle C is 28.26 sq. cm.
The area of Square S is 9.0 sq. cm.
The area of Triangle T is 1.5 sq. cm.
Até o próximo projeto!
No comments:
Post a Comment