Estou com a seguinte duvida, por exemplo, eu tenho um metodo Metodo1( ) na minha superclasse, crio uma instancia da subclasse. Eu quero que a subclasse use o Metodo1( ) da minha superclasse, so que sem a subclasse saber quem é minha superclasse.
Um exemplo disto (se eu estiver correto) e o Thread.start( ) que contata o metodo run( ) da superclasse.
Qualquer coisa relacionado ao assunto vai me ajudar e muito. Principalmente exemplos
A pergunta não ficou muito clara…
A subclasse sempre vai saber qual é a superclasse. Afinal, para ela ser uma subclasse tem que colocar na declaração extends superclasse.
Se você não implementar um Metodo1() na subclasse, ela automaticamente vai usar o da superclasse. Se você implementar, para chamar o da superclasse vai precisar de um super.Metodo1().
Quanto a Thread, é um caso totalmente diferente. Ela implementa a interface Runnable que declara o método run, porém a implementação está dentro da própria classe Thread.
S
Shneider
Este é o problema, esta subclasse nao pode ter extends superclasse, dai o problema de usar o metodo da superclasse sem saber quem ela é (sem o extends)
Bani
Mas se não tem extends não é superclasse. É uma classe comum. Você simplesmente instancia um objeto dela dentro da sua classe e chama o método (isso chama-se composição).
S
Shneider
Um exemplo do que eu queria
testa.java
classClasseA{ClasseA(){ClasseBb=newClasseB();}voidMetodo1(){System.out.println("Metodo1 ClasseA");}}classClasseB{ClasseB(){// Contata o Metodo1 da ClasseA// So nao sei fazer isso}}classtesta{publicstaticvoidmain(Stringargs[]){ClasseAa=newClasseA();}}
Bani
Bom, aí você tem um problema de design…
Para instanciar um objeto da classe B você precisa chamar um método que não é estático da classe A, portanto precisaria de um objeto da classe A, mas para criar esse objeto você precisa instanciar um da classe B, voltando ao início do problema.
Você vai ter que pensar em alguma outra forma de fazer isso.
publicinterfaceCommand{publicvoidmetodo(intx);};publicclassClasseAimplementsCommand{publicvoidmetodo(intx){System.out.println("Classe A "+x);}publicClasseA(){newClasseB(this);}}publicclassClasseCimplementsCommand{publicvoidmetodo(intx){System.out.println("Classe C "+x);}publicClasseC(){newClasseB(this);}}publicclassClasseB{publicClasseB(Commandc){c.metodo(5);}}classTesta{publicstaticvoidmain(Stringargs[]){ClasseAa=newClasseA();ClasseCc=newClasseC();}}
editado
ou então da uma estudada em reflection e passa o nome da classe e do metodo para a classe que tu quiser
S
Shneider
Exatamente o que eu queria
Revirei todos os meus livros e não achei nada do tipo rs,