Query sull'utilizzo del costruttore predefinito 'Window ()' da java.awt

0

Ho avuto questo query prima di porre questa domanda.

In class Window abbiamo un costruttore con il livello di accesso diretto predefinito package private ma non private come mostrato di seguito:

Window() throws HeadlessException {
        GraphicsEnvironment.checkHeadless();
        init((GraphicsConfiguration)null);
    }

Con class dummy che eredita class Window ,

import java.awt.*;

public class dummy extends Window{
    dummy() {

    }
}

Vedo questo errore: Implicit super constructor Window() is not visible. Must explicitly invoke another constructor

Ho progettato una classe non pubblica con costruttore di zero-arg con livello di accesso diretto predefinito package private e il costruttore della sottoclasse richiama il costruttore della superclasse zero-arg senza alcun errore.

Mi piacerebbe capire,

Perché il compilatore mostra questo errore nonostante il livello di accesso diretto al costruttore Window(){} è package private ?

Nota: sto usando jdk 1.6

    
posta overexchange 30.11.2014 - 04:41
fonte

1 risposta

1

Per lo stesso motivo della domanda collegata: il costruttore è pacchetto-privato. Non è possibile accedere al di fuori del pacchetto java.awt e presumo che la tua classe non sia in quel pacchetto.

In questo caso, mi chiedo perché dovresti estendere la classe Window all'inizio. In generale, si dovrebbe sempre usare AWT e Swing assemblando componenti standard. È abbastanza raro trovarsi in una situazione in cui è necessario creare una sottoclasse per qualsiasi classe AWT o Swing. Spesso è un segno dell'uso scorretto dei framework: ad esempio, sottoclasse JFrame per impostare il titolo del frame nel costruttore e per aggiungere componenti, quando entrambe le azioni sono perfettamente adatte per essere eseguite in un'altra classe (create JFrame usando la stringa costruttore, chiama add() con sottocomponenti).

    
risposta data 30.11.2014 - 07:11
fonte

Leggi altre domande sui tag