m (→Interfaces) |
(→Métodos) |
||
Line 67: | Line 67: | ||
=== Métodos === | === Métodos === | ||
+ | |||
+ | Um método declarado <code>final</code> numa classe não pode ser redefinido em nenhuma sublasse dessa classe. | ||
+ | |||
+ | class X { | ||
+ | void f() { /* qualquer coisa */} | ||
+ | } | ||
+ | |||
+ | class Y extends X { | ||
+ | // ok: redefinição de X.f() | ||
+ | final void f() { /* ... */ } | ||
+ | } | ||
+ | |||
+ | class Z extends Y { | ||
+ | // erro: f() é final em Y | ||
+ | // void f() { /* ... */ } | ||
+ | } | ||
=== Classes === | === Classes === |
Ver switch
.
Ver try
.
Ver switch
.
Ver while
.
Ver if
.
Ver class
.
Um método declarado final
numa classe não pode ser redefinido em nenhuma sublasse dessa classe.
class X { void f() { /* qualquer coisa */} } class Y extends X { // ok: redefinição de X.f() final void f() { /* ... */ } } class Z extends Y { // erro: f() é final em Y // void f() { /* ... */ } }
Quando aplicado a uma classe, final
impede que ela venha a ser especializada.
final class UmaClasse { /* definição da classe */ } // erro //class OutraClasse extends UmaClasse { /* ... */ }
As interfaces não podem ser afectadas por final
.
// ilegal //final interface UmInterface { /* definição da interface */ }
Ver try
.
Ver interface
.
Operador.
Referência para o objecto "actual", i.e., para o objecto no contexto do qual se executa o código onde aparece a referência. O exemplo seguinte, embora não siga as regras de nomenclatura, ilustra o uso de this
como forma de desambiguar as variáveis no construtor.
class A { int x; A(int x) { this.x = x; } }
Num construtor, esta palavra reservada pode ser utilizada para chamar explicitamente outro construtor da mesma classe. Quando é utilizado desta forma, this
pode ocorrer apenas uma vez e deve aparecer como a primeira instrução do construtor.
class A { A(int i) { /* qualquer coisa */ } A(float f, int i) { this(i); // chamada ao primeiro construtor /* resto do segundo construtor */ } }