Tentando usar uma funcao de uma superclasse

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 :smiley:

Muito obrigado ^^

[ ]'s

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.

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)

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

Um exemplo do que eu queria :slight_smile:

testa.java

class ClasseA {
    ClasseA( ) {
        ClasseB b = new ClasseB( );
    }
    void Metodo1( ) {
        System.out.println("Metodo1 ClasseA");
    }
}

class ClasseB {
    ClasseB( ) {
        // Contata o Metodo1 da ClasseA
        // So nao sei fazer isso
    }
}

class testa {
    public static void main(String args[ ]) {
        ClasseA a = new ClasseA( );
    }
}

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.

Se não tivesse todo esse rolo dos construtores seria somente
ClasseA a = new ClasseA();
a.Metodo1();

tenta isto:

public interface Command{
  public  void metodo(int x);
};

public class ClasseA implements Command {
  public  void metodo(int x){
      System.out.println("Classe A " +x);
  }
  public ClasseA(){
     new ClasseB(this);
  }
}

public class ClasseC implements Command {
  public  void metodo(int x){
      System.out.println("Classe C " +x);
  }
  public ClasseC(){
     new ClasseB(this);
  }
}

public class ClasseB{
  public ClasseB(Command c){
      c.metodo(5);
  }
}

class Testa {
    public static void main(String args[ ]) {
        ClasseA a = new ClasseA( );
        ClasseC c = new ClasseC( );
    }
} 

editado
ou então da uma estudada em reflection e passa o nome da classe e do metodo para a classe que tu quiser :slight_smile:

Exatamente o que eu queria :smiley: :smiley: :smiley:

Revirei todos os meus livros e não achei nada do tipo rs,

Valew ae pessoal muito obrigado ^^