Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Ciao,
    da quello che ho letto le classi astratte non sono istanzanziabili, nel tuo esempio crei un array di due elementi Solido con new, non stai istanziando in questo modo?

    Forse mi sfugge un concetto, provo a spiegarmi con un esempio :
    se classe B estende (aggiungendo un suo metodo) classe A (che ha suoi metodi, variabili etc), io mi ritrovo che, se istanzio un oggetto di tipo B, ho un qualcosa che comprende tutte le caratteristiche di un tipo A pi� tutto ci� che � definito nel tipo B, quindi vedo un valore aggiunto (sfrutto tutto le caratteristiche di A in pi� aggiungo le caratteristiche implementate in B), � corretta questa cosa? La classe derivata in questo caso � sicuramente pi� ricca della classe padre ?
    In questo caso io chiaramente potrei fregarmene di come � scritto il codice dentro classe A, ne sfrutto le caratteristiche "finali" estendendola tramite la mia classe B.

    Nelle classi astratte invece, quello che sto cercando di dire, �: se comunque l'astratta padre non la posso istanziare in quanto astratta, dovr� per forza istanziare la derivata dove sono implementati i metodi che nell'astratta sono vuoti, tanto vale istanziare una classe completa di tutto senza derivarla da quella astratta (che non mi da un valore aggiunto). Oppure � una questione di scope/incapsulamento che mi sfugge?
    Cosa sfrutto di "utile" della astratta estendendola?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da rick.card82 Visualizza il messaggio
    da quello che ho letto le classi astratte non sono istanzanziabili, nel tuo esempio crei un array di due elementi Solido con new, non stai istanziando in questo modo?
    new Solido[2] istanzia un array di tipo Solido[] (NON oggetti Solido!). Questo è lecito. Cioè è perfettamente possibile dichiarare variabili e istanziare array di tipi astratti.
    Se ciò non fosse possibile, non si potrebbero avere dei "contenitori" di oggetti che siano in grado di contenere tutti i sottotipi.

    Quote Originariamente inviata da rick.card82 Visualizza il messaggio
    se classe B estende (aggiungendo un suo metodo) classe A (che ha suoi metodi, variabili etc), io mi ritrovo che, se istanzio un oggetto di tipo B, ho un qualcosa che comprende tutte le caratteristiche di un tipo A pi� tutto ci� che � definito nel tipo B, quindi vedo un valore aggiunto (sfrutto tutto le caratteristiche di A in pi� aggiungo le caratteristiche implementate in B), � corretta questa cosa? La classe derivata in questo caso � sicuramente pi� ricca della classe padre ?
    Corretto.

    Quote Originariamente inviata da rick.card82 Visualizza il messaggio
    Nelle classi astratte invece, quello che sto cercando di dire, �: se comunque l'astratta padre non la posso istanziare in quanto astratta, dovr� per forza istanziare la derivata dove sono implementati i metodi che nell'astratta sono vuoti,
    Ti ribadisco che una classe astratta PUÒ avere costruttori, variabili di istanza e anche metodi "concreti".

    Quote Originariamente inviata da rick.card82 Visualizza il messaggio
    tanto vale istanziare una classe completa di tutto senza derivarla da quella astratta (che non mi da un valore aggiunto).
    No il valore aggiunto è appunto la "astrazione" ed anche il "contratto" che le sottoclassi concrete devono rispettare andando ad implementare quei metodi eventualmente astratti.

    Se Cubo/Sfera non derivassero da Solido (ma solamente implicitamente da Object), allora in Cubo potresti avere un getVolume() e un getSuperficieCalcolata() mentre in Sfera potrebbe esserci un calcolaIlVolume() e un calcolaLaSuperficie().

    Entrambi sanno calcolare volume/superficie ma con nomi di metodi differenti e quindi NON potresti "accomunarli" usando un tipo più generico. Potresti metterli in un array di Object ( Object[] ) ma Object non "sa" nulla di questi metodi e quindi NON potresti invocarli.
    Insomma non avresti una "astrazione" di questi due tipi.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.