Originariamente inviato da Teo80
sto facendo un esercizio sull'uso dell'ereditarietà, ma ottengo il seguente errore:

.\Punto3D.java:4: cannot find symbol
symbol : constructor Punto()
location : class Punto
public Punto3D(int x, int y, int z) {
Beh, sì. Il motivo è semplice: la prima istruzione di un costruttore deve essere una invocazione di super() o this() (con o senza argomenti). Se non si mette nulla, viene messo in automatico (dal compilatore) un super() senza argomenti.
Nel costruttore di Punto3D c'è un super() senza argomenti, messo in automatico. Ma la classe Punto non ha un costruttore senza argomenti!!!!

E comunque la tua estensione viola il principio di sostituzione di Liskov (LSP, Liskov substitution principle). Il LSP dice una cosa molto semplice: un sottotipo deve poter essere sostituibile al posto del tipo base.
Ora ... se un metodo ha un parametro di tipo Punto, puoi passare un Punto3D?? Tecnicamente certo, è ovvio. Ma è sbagliato concettualmente!! Cosa potrebbe fare il metodo con un oggetto Punto3D visto che si aspetta un Punto??? Direi nulla ....

Non ha senso questa estensione!