A palavra-chave super

Java não oferece o mecanismo de herança múltipla, ou seja, não é possível criar uma classe derivada com mais de uma classe base. Por esse motivo, é simples fazer uma referência da classe derivada para sua superclasse; o mecanismo para tal é o uso da palavra-chave super.

Construtores da superclasse podem ser explicimente invocados usando o método super(). No exemplo do Ponto3D, isso é feito para o construtor da classe derivada com argumentos:

    public Ponto3D(int x, int y, int z) {
	super(x, y);
	this.z = z;
    }

A expressão super(x, y); na primeira linha do construtor está invocando o construtor da classe base, Ponto2D, que recebe dois argumentos. O efeito dessa invocação é iniciar os valores dos atributos x e y do objeto com os valores dos parâmetros x e y recebidos pelo método construtor.

A invocação do método super(), se presente, deve estar na primeira linha. Implicitamente, o compilador faz a invocação do construtor super() default (sem argumentos) para cada construtor definido. Por esse motivo, o segundo construtor da classe Ponto3D não faz a invocação desse método explicitamente. Assim,

    public Ponto3D( ) {
	z = 0;
    }
equivale a
    public Ponto3D( ) {
        super();
	z = 0;
    }

Esse é um dos motivos pelo qual é sempre interessante ter o construtor default definido. Entretanto, a invocação direta pode ser interessante quando se deseja invocar algum construtor que não o default, como no exemplo anterior.

Outro uso dessa palavra-chave é como prefixo para referenciar métodos da superclasse.


© Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP

Last modified: Sun Sep 26 15:40:04 Hora padrão leste Am. Sul 1999