Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [JAVA] A che servono i costruttori nelle classi astratte?

    Salve,

    in Java è possibile dichiarare classi abstract, ovvero classi che abbiano uno o più metodi e/o membri dichiarati come abstract.
    Le classi astratte fungono da modello per le future classi (concrete) derivate che hanno l'obbligo di ridefinire i metodi astratti ereditati, pena diventare esse stesse classi astratte.
    Data la loro genericità non è possibile istanziare oggetti da una classe astratta.

    Una classe astratta può anche avere dei costruttori.
    Scopo del costruttore è impostare i valori delle variabili d'istanza della classe al fine di ottenere futuri oggetti i cui dati si trovino in uno stato consistente.

    DOMANDA: Se non è possibile creare oggetti a partire da una classe astratta, che senso ha implementare un costruttore per tale classe astratta? :master:

    Grazie dell'attenzione,
    Matteo
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  2. #2
    Mi autorispondo:

    Supponiamo di avere una classe astratta Animali e varie classi derivate concrete Cane, Gatto,ecc.
    Le classi derivate che rappresentano animali concreti avranno senz’altro un costruttore, che per prima cosa invocherà un costruttore della classe-base (la classe astratta).
    Se esiste anche solo un campo dati privato nella classe-base, per inizializzarlo servirà un costruttore della classe-base, visto che le classi derivate non ne hanno visibilità diretta.
    Naturalmente, tale costruttore non sarà mai usato direttamente (perché non esisteranno mai istanze di “generici” animali), ma sarà chiamato dai costruttori delle classi derivate.
    Il costruttore può essere public anche solo protected.
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] A che servono i costruttori nelle classi astratte?

    Originariamente inviato da matthew80
    in Java è possibile dichiarare classi abstract, ovvero classi che abbiano uno o più metodi e/o membri dichiarati come abstract.
    La parola chiave 'abstract' si usa solo per le classi e per i metodi.

    Una classe marcata abstract può anche non avere metodi abstract! Se però almeno un metodo è abstract, allora la classe deve essere marcata astract!

    Originariamente inviato da matthew80
    Le classi astratte fungono da modello per le future classi (concrete) derivate che hanno l'obbligo di ridefinire i metodi astratti ereditati, pena diventare esse stesse classi astratte.
    Se in una classe "concreta" (non astratta) non si fornisce una implementazione di tutti i metodi astratti (di una superclasse astratta o di interfacce), è un errore di compilazione e basta.

    Originariamente inviato da matthew80
    Data la loro genericità non è possibile istanziare oggetti da una classe astratta.
    Corretto.

    Originariamente inviato da matthew80
    Una classe astratta può anche avere dei costruttori.
    Scopo del costruttore è impostare i valori delle variabili d'istanza della classe al fine di ottenere futuri oggetti i cui dati si trovino in uno stato consistente.

    DOMANDA: Se non è possibile creare oggetti a partire da una classe astratta, che senso ha implementare un costruttore per tale classe astratta? :master:
    Una classe astratta vuol solo dire che non può essere istanziata, non che non deve poter fare le sue inizializzazioni come si deve.
    Il costruttore non serve solo a inizializzare le variabili della classe, serve anche per chiamare il costruttore della superclasse.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Sei meglio di wikipedia
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.