Dúvida questão do livro da Kathy (SCJP 6)

3 respostas
ebortolatto

Boa noite! :wink:
Pessoal, tem uma questão que eu estou em dúvida no livro da Kathy... o polimorfismo só se aplica a métodos de instância, correto?
Porém vejam este código:

public class A extends B {
    public static String sing() { return "fa";}
    
    public static void main(String[] args) {
        A a  = new A();
        B b = new A();
        
        System.out.println(a.sing() + " " + b.sing());
    }
}

class B {
    public static String sing() {
        return "la";
    }
}

A saída produzida é "fa la", porém são métodos estáticos. Seguindo o que o livro fala, não deveria ser "fa fa"?
Pelo que estou vendo o polimorfismo está se aplicando quando eu invoco b.sing().
Se alguém puder me esclarecer essa dúvida eu agradeço! :)

3 Respostas

georgesq

quando vc usa uma instancia de uma classe para um método abstrato, isso indica a VM que vc quer utilizar o valor estático daquela classe, independente de vc ter extendido outra com o mesmo método ou atributo estático, portanto:

A.sing() == a.sing()

e no caso de B é normal, visto que ela num extende nenhuma classe…

[s]
BA

deyvid

Desculpe georgesq mas não há nenhum método abstrato nem na classe A quanto na classe B.

ebortolatto

Valeu ai pessoal! Quando os métodos são estáticos na verdade o que é importa é o tipo da referência e não o tipo do objeto :slight_smile:
Eles colocam este tipo de questão pra confundir mais ainda rsrs

Criado 13 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 3
Participantes 3