Duvida Programa  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
Markinhus86
Debugger
[Avatar]

Membro desde: 08/04/2009 10:11:20
Mensagens: 64
Offline

Ae pessoal duas duvidas pf

- Qual deve ser a classe do parametro obj do metodo invocarDraw da classe Prova?
- Quais serao as saidas da classe Prova?

class Shape {
String draw () {
return "Shape.draw().";
}}
class Rectangle extends Shape {
String draw () {
return super.draw() + "Rectangle.draw().";
}}
class Square extends Rectangle {
String draw () {
return super.draw() + "Square.draw().";
}}
class Circle extends Square {
String draw () {
return super.draw() + "Circle.draw().";
}}
class Triangle extends Circle {
String draw () {
return super.draw() + "Triangle.draw().";
}}

public class Prova{
private String invocarDraw(? obj) {
return obj.draw; }
public static void main ( String [] args) {
Prova prova = new Prova();
Shape shape = new Shape();
System.out.println(prova.invocarDraw(shape));
Shape shape = new Square();
System.out.println(prova.invocarDraw(shape));
Circle circle = new Circle();
System.out.println(prova.invocarDraw(circle));
}}

Valeuu =)
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

Olá,

O seu código implementado corretamente, de acordo com o que você passou, seria:



Onde:



deve ser substituído por:



Nesse trecho é apresentada a forma correta de implementar esse método utilizando genérics. Quando usei



estava indicando que no meu método qualquer objeto que fosse uma subclasse de Shape seria aceito. Então usei o tipo T (poderia ser qualquer outra letra) para identificar o tipo e usá-lo dentro da classe. É claro que existem diversas particularidades sobre generics a serem estudadas, mas isso você consegue com algumas pesquisas (até rápidas).



Já que draw é um método é necessário invocá-lo corretamente e não usá-lo como se fosse um atributo. Assim esse seu método deve compilar normalmente. O mesmo resultado seria obtido caso o método fosse implementado da seguinte maneira:



Quanto ao resultado:



Obs. Não esqueça de usar a tag code quando for passar algum código.

[Email] [MSN]
Markinhus86
Debugger
[Avatar]

Membro desde: 08/04/2009 10:11:20
Mensagens: 64
Offline

Mas entao qual deve ser a classe do parametro obj do metodo invocarDraw da classe Prova? Eh classe ShaPe?
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

Sim.

Como você definiu que pode ser qualquer classe que estenda Shape, o compilador vai remover o tipo genérico (T no exemplo que te mostrei) e colocar Shape no lugar.
[Email] [MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team