PDA

View Full Version : [Java] Errore banalissimo nell' estendere


|giacomo|
22-02-2009, 21:22
class Simpaticopaint extends JFrame, Canvas implements MouseMotionListener {

So che e un errore banalissimo ma mi sono impiantato e non riesco a venirne fuori :mc: ..povero me..insomma..questa banalissima estensione (JFrame, Canvas) mi da l' errore " '{' expected "..e non capisco perchè inquanto se estendo solo una (indifferentemente JFrame o Canvas) non mi da l' errore..

PGI-Bis
22-02-2009, 21:27
Puoi estendere una sola classe.

|giacomo|
22-02-2009, 21:29
Puoi estendere una sola classe.

Ah...:muro: ..:( ..e come posso fare per fare una cosa del genere?creare un altra classe?cmq l' avevo visto da qui http://www.lattecafe.net/java/articoli/javakeyword.htm ..alla voce extends

wingman87
22-02-2009, 21:36
Sì però in quell'esempio dichiarava un'interfaccia che estendeva due interfacce, tu invece stai tentando di dichiarare una classe che estende due classi concrete

|giacomo|
22-02-2009, 21:39
Sì però in quell'esempio dichiarava un'interfaccia che estendeva due interfacce, tu invece stai tentando di dichiarare una classe che estende due classi concrete

Uhmm..e vero..:D..ops..:D..quindi per fare la stessa cosa senza provocare errore dovrei creare un altra classe?

PGI-Bis
22-02-2009, 21:40
extends si usa sia quando una classe estende un'altra classe sia quando un'interfaccia estende una o più interfacce.

Puoi dire:

public interface InterfacciaA extends InterfacciaB, InterfacciaC

ma non puoi dire

public class ClasseA extends ClasseB, ClasseC

mentre puoi dire

public class ClasseA extends ClasseB implements InterfacciaA, InterfacciaB

La ragione per cui puoi estendere una sola classe sta in ciò che avendo le classi una definizione per ogni metodo l'estensione di più classi aventi ciascuna un metodo dall'identica firma avrebbe richiesto l'introduzione di una regola ad hoc per stabilire quale tra le diverse implementazioni dello stesso metodo avrebbe dovuto essere ereditata.

Poichè le interfaccie possono avere solo dichiarazioni di metodo il problema non si pone (non c'è alcuna definizione tra cui scegliere quindi una vale l'altra).

Puoi risolvere il tuo problema con la composizione.

public class Bingo {
private class MyFrame extends JFrame {

}

private class MyCanvas extends Canvas {

}
}

|giacomo|
22-02-2009, 21:51
Cosa sarebbe il mondo senza i forum!!:D..grazie infinite!!