Amigos, estou tendo dificuldade em solucionar um exercício, alguém poderia dar uma força?? O problema é: tenho uma classe chamada principal, ela deve ter um método chamado showArea que recebe como parâmetro um Objeto que extende da classe FiguraSwing, como o Objeto extende FiguraSwing ele implementa o método show(). Seguem as classes. Não estou sabendo como implementar isso.
[code]
package fg;
public interface FiguraSwing {
public abstract void showArea();
}[/code]
[code]
package fg;
public abstract class FiguraGeometrica {
private Double area;
public Double getArea() {
return area;
}
public void setArea(Double area) {
this.area = area;
}
public abstract void calcularArea();
}[/code]
[code]
package fg;
public class Quadrado extends FiguraGeometrica {
private Double lado;
public void calcularArea(){
setArea(Math.pow(lado, 2));
}
public Double getLado() {
return lado;
}
public void setLado(Double lado) {
this.lado = lado;
}
}[/code]
[code]
package fg;
public class QuadradoSwing extends Quadrado implements FiguraSwing {
public void showArea(){
}
}[/code]
package fg;
import javax.swing.JOptionPane;
public class Principal {
public static void main(String[] args) {
String opcao = JOptionPane.showInputDialog(null,"Escolha a Figura \n1 Quadrado \n2 Triângulo \n3 Círculo");
int novaOpcao = Integer.parseInt(opcao);
if (novaOpcao ==1){
JOptionPane.showMessageDialog(null,"Você escolheu quadrado");
String opcaoLado = JOptionPane.showInputDialog(null, "Informe o lado do Quadrado");
Double lado = Double.parseDouble(opcaoLado);
Quadrado areaQ = new Quadrado();
areaQ.setLado(lado);
areaQ.calcularArea();
JOptionPane.showMessageDialog(null,"A área do quadrado é : " + areaQ.getArea());
}
}
}
Supondo que o problema seja somente o citado acima, você deve criar um método na classe principal assim:
public static void showArea(FiguraSwing figuraSwing) {
//aqui se chama o método do figuraSwing
}
Só duas coisas:
Tente deixar claro ao máximo sua dúvida no assunto de forma sucinta
Tente ser mais direta na dúvida pois muito código no tópico mais atrapalha do que ajuda, por exemplo:
Tenho uma classe abstrata assim assado, e uma interface com o método assim assado. Criei uma classe que extende da abstrata e implementa a inteface. Como faço pra blábláblá … ok ?
Primeiro: Na classe principal tenho que ter um método chamado showArea que mostre o cálculo da área que o usuário quer calcular. Tenho que calcular a área de cada figura e com resultado mostrar no método showArea. Esse método é feito em que parte do código??
Segundo: Tenho que criar um objeto que extenda da classe FiguraSwing que servirá de parâmetro para o método showArea. Onde crio este objeto e ele é de que tipo???
Na realidade preciso implementar o método showArea da interface FiguraSwing na classe Principal, mostrando o valor de todas as áreas que o usuário escolher. Tb preciso criar um objeto que extenda de FiguraSwing que servirá de parâmetro para o método showArea. O que não estou entendendo é como vou mostrar o resultado das áreas calculadas no método showArea, de que tipo é esse objeto e onde vou criá-lo . Outra dúvida, esse método showArea é quem define qual área será mostrada???
Na implementação do método showArea, quando passo os parâmetros QuadradoSwing quadrado) na classe Principal ocorre o seguinte erro:
The type Principal must implement the inherited abstract method FiguraSwing.showArea().
Estou calculando a área onde o usuário escolhe a opção da figura e passa os dados para o cálculo, como fazer para levar isso ao método showArea?
Onde devo colocar o código que vai chamar o método showArea, será dentro da classe main.
Observe que a classe Principal não deve extender FiguraSwing, isso não é necessário, pode retirar isso do código pra começar… é só preciso colocar o método recebendo como argumento um FiguraSwing.
[quote]como o Objeto extende FiguraSwing ele implementa o método show(). Seguem as classes. Não estou sabendo como implementar isso.
package fg;
public interface FiguraSwing {
public abstract void showArea();
}
[/quote]
Aqui vc já fez uma coisa errada… olhe o nome do método que vc disse precisar implementar e o que vc colocou aqui. Comece por arrumar o nome…
Se o método que vc fala é o showArea, vc mesmo se respondeu nessa pergunta, é na classe Principal. E de brinde, vou passar uma implementação… já que o método só deve mostrar o resultado, deve ser só chamar o método show() da classe que implementa a interface:
public void showArea(FiguraSwing figura) {
figura.show();
}
Vc precisa ter o metodo showArea na classe principal? Se sim somente cria um ou implemente a interface FiguraSwing, com isso vc sera obrigada a implemente o metodo. Mais creio que não seja isso que vc precisa, vc só precisa chamar o metodo showArea para mostrar a area ja calculada certo?
Vamos ao codigo então…
public class Principal implements FiguraSwing {
public void showArea(Quadrado obj) {
obj.setLado(seuValor);
obj.calcularArea();
System.out.println(obj.getArea());
}
}
Na realidade preciso implementar o método showArea da interface FiguraSwing na classe Principal, mostrando o valor de todas as áreas que o usuário escolher. Tb preciso criar um objeto que extenda de FiguraSwing que servirá de parâmetro para o método showArea. O que não estou entendendo é como vou mostrar o resultado das áreas calculadas no método showArea, de que tipo é esse objeto e onde vou criá-lo . Outra dúvida, esse método showArea é quem define qual área será mostrada???
Aguardo retorno do amigo.[/quote]
Arviana,
O que define o que cada metodo vai fazer é o programador =).. provavelmente pelo nome showArea() - show do ingles é mostrar Area algo do tipo. Por padrão utilizamos nomes de metodos que vão facilitar na manutenção do nosso codigo por outros programadores para facilitar assim a vida dos mesmos.
Bom ja que vc precisa implementar o metodo na classe principal implemente a interface em primeiro momento assim
Em segundo momento implemente o metodo
[code] public void showArea(QuadradoSwing quadrado) {
//Aqui vc implementa o codigo para mostrar a AREA
// Se não souber avisa que faço um exemplo pra vc
}
[/code]
Em terceiro: o codigo que vai chamar o metodo showArea()
QuadradoSwing quadrado = new QuadradoSwing();
this.showArea(quadrado);
Em quarto: Vc ja implementou o codigo para o usuario escolher o q ele quer e passar os dados ao “quadrado” como por exemplo.
Deu esse erro é pq implementei o metodo showArea com outra assinatura diferente da interface.. Muda a interface para a mesma assinatura do metodo q implementei na classe Principal ok? E quanto sua duvida, pode ser sim na class onde contem o metodo main.. Mais lembre q um contexto statico não pode chamar um contexto não statico viu..