Crie a seguinte classe em "TesteFinal.java"
class TesteFinal {
private int id;
private String nome;
public int getId() { return id; }
public String getNome() { return nome; }
public TesteFinal (int pId, String pNome) {
id = pId; nome = pNome;
}
public String toString() {
return getClass().getName() + "= " + id + ", " + nome;
}
}
Crie a seguinte classe em "ClasseFilha.java"
class ClasseFilha extends TesteFinal {
private String endereco;
public ClasseFilha (int pId, String pNome, String pEndereco) {
super (pId, pNome);
endereco = pEndereco;
}
public String toString() {
return getClass().getName() + "= " + getId() + ", " + getNome() + ", " + endereco;
}
public static void main(String[] args) {
ClasseFilha cf = new ClasseFilha (100, "Ronaldo Nazario", "Madrid");
System.out.println (cf.toString());
}
}
Compile "ClasseFilha.java" com o comando javac. Isso irá compilar indiretamente "TesteFinal.java". Rode essa classe, você irá ter:
C>java -cp . ClasseFilha
ClasseFilha= 100, Ronaldo Nazario, Madrid
Agora edite TesteFinal.java para que a classe fique "final":
final class TesteFinal {
...
Compile APENAS TesteFinal.java.
Agora tente rodar ClasseFilha.java. Para o JDK 1.3, 1.4 e 5.0 da Sun, tive o seguinte resultado:
C>\jdk1.5.0\bin\java -cp . ClasseFilha
Exception in thread "main" java.lang.VerifyError: Cannot inherit from final clas
s
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)