Como referenciar um método da superclasse sobrescrito na subclasse?

7 respostas
T

Oi
tentei acionar o método toString() de uma superclasse com um objeto de uma subclasse desta classe, com o seguinte comando:

obj.super.toString();

porém o compilador não reconhece este comando. alguém pode me ajudar

7 Respostas

Polimorphism

acredito que não se possa utilizar um método sobrescrito.

G

eh so retornar o objeto da classe mae nao precisa referenciar o to string

Polimorphism

E se o método requer campos da classe?

Nicolas_Fernandes

Olá, Thiago.

Para chamar um método da classe mãe, deve-se usar a cláusula super.

Não entendi exatamente o que você quer.
Coloque um exemplo de sua dúvida, tentaremos de ajudar!

[]'s

mcbarsotti

não entendi absolutamente nada do seu problema.
escreve novamente sua duvida ou então coloca o seu codigo ai, tanto da classe pai quanto da filha (coloca o codigo entre as tags code ).

E

De fato, exceto pelo caso do uso de “super” dentro da definição do método sobreescrito, não se pode chamar o método sobreescrito, a menos que você escreva em bytecodes, em vez de chamar o método com 100% puro Java.

class A {
    public void f () {
        System.out.println ("A");
    }
    public static void g() {
        System.out.println ("static A");
    }
}
class B extends A {
    public void f () {
        System.out.println ("B");
    }
    public static void g() {
        System.out.println ("static B");
    }
}


class TesteSobreescrito {
    public static void main(String[] args) {
        A a = new B();
        a.f(); // imprime "B"
//      b.super.f(); // não compila
        ((A) a).f(); // continua a imprimir "B"
// Entretanto, se pudéssemos escrever diretamente com bytecodes,
// poderíamos chamar o método f da classe A, 
// usando invokespecial em vez de invokevirtual.
// veja http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14787
        a.g(); // imprime "static A"
        B b = (B)a;
        b.g(); // imprime "static B"
        ((A)b).g(); // imprime "static A"
    }
}
T
A a = new B()

Vai utilizar a implementacao do metodo f da classe B

vc pode fazer

A a2 = new A()

Vai chamar a implementacao do metodo f da classe A

Metodos staticos nao se sobreescreve. Eles não fazem parte do objecto instanciado mas sim da classe.

vc pode criar mais uma classe C que extende A por exemplo

metodo f()
super.f();

Criado 14 de setembro de 2009
Ultima resposta 14 de set. de 2009
Respostas 7
Participantes 7