Tentando usar uma funcao de uma superclasse

7 respostas
S

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

7 Respostas

Bani

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

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

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( );
    }
}
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.

Se não tivesse todo esse rolo dos construtores seria somente

ClasseA a = new ClasseA();

a.Metodo1();
urubatan

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:

S

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 ^^

Criado 26 de outubro de 2003
Ultima resposta 26 de out. de 2003
Respostas 7
Participantes 3