Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Interfacce

Hybrid View

  1. #1
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La classe Persona è abstract, quindi non è istanziabile.
    Istanziare un array di tipo X[] dove X è una classe astratta o una interfaccia invece è assolutamente lecito. Infatti può contenere riferimenti a classi "concrete".


    Studente ha un costruttore ... ma ha argomenti. Tu stai tentando di usare un costruttore senza argomenti ... che non esiste in Studente.

    Domanda: stai studiando Java su un qualche libro (e quale), oppure no?
    Ok adesso sto capendo
    L'ho modificato in questo modo:
    codice:
    package J10;
    
    
    public class StampaTasse {
    
    
        public static void main(String[] args) {
        Studente[] arrayStudente = new Studente[2];
        int i;
    
        arrayStudente[0] = new Studente("",0,"0");
        arrayStudente[1] = new Studente("",0,"0");
    
    
        arrayStudente[0].setNome("Michele");
        arrayStudente[0].setEta(20);
        arrayStudente[0].setMatricola("123456");
        arrayStudente[1].setNome("Andrea");
        arrayStudente[1].setEta(25);
        arrayStudente[1].setMatricola("987654");    
    
            for(i=0;i<2;i++){
            System.out.println(arrayStudente[i].codiceFiscale());
            System.out.println(arrayStudente[i].aliquotaFiscale());
            System.out.println(arrayStudente[i].detrazioni());
            }
        }
    }
    La classe Persona è abstract, quindi
    non è istanziabile.
    Istanziare un array di tipo X[] dove X è una classe astratta o una interfaccia invece è assolutamente lecito. Infatti può contenere riferimenti a classi "concrete".
    Dunque da quello che mi hai spiegato (se ho capito bene) è inutile utilizzare un array di Persone, anzi è impossibile siccome Persona è una "generalizzazione" delle classi Persona e Lavoratore. Giusto???

    Ho iniziato adesso l'esame che dovrei fare tra un mese circa. Il problema e che sono un elettronico e con l'informatica faccio a cazzotti. Grazie per la pazienza ragazzi...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da anto_dina Visualizza il messaggio
    Dunque da quello che mi hai spiegato (se ho capito bene) è inutile utilizzare un array di Persone, anzi è impossibile siccome Persona è una "generalizzazione" delle classi Persona e Lavoratore. Giusto???
    No, non è inutile. Avere un array di tipo Persona[] (indipendentemente dal fatto che Persona sia abstract o no) permette di sfruttare il polimorfismo, ma anche addirittura un array di tipo Tassabile[] sarebbe corretto se l'intenzione è quella di "vedere" gli oggetti solo come "tassabili" cioè solo per usare i metodi di Tassabile.

    codice:
    Persona[] persone = new Persona[3];
    persone[0] = new Studente( ..... );
    persone[1] = new Lavoratore( ..... );
    persone[2] = new Studente( ..... );

    Questo è perfettamente lecito. Se invochi un persone[indice].aliquotaFiscale(), verrà eseguito il "giusto" metodo aliquotaFiscale per l'oggetto realmente istanziato che si trova a quell'indice dell'array.

    E il fatto che Persona abbia un comportamento (i metodi) tutto "concreto" rende l'uso di abstract poco sensato.

    Quote Originariamente inviata da anto_dina Visualizza il messaggio
    Ho iniziato adesso l'esame che dovrei fare tra un mese circa.
    Sì ma ripeto: stai usando un qualche libro o stai andando un po' a "tentativi" ?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, non è inutile. Avere un array di tipo Persona[] (indipendentemente dal fatto che Persona sia abstract o no) permette di sfruttare il polimorfismo, ma anche addirittura un array di tipo Tassabile[] sarebbe corretto se l'intenzione è quella di "vedere" gli oggetti solo come "tassabili" cioè solo per usare i metodi di Tassabile.

    codice:
    Persona[] persone = new Persona[3];
    persone[0] = new Studente( ..... );
    persone[1] = new Lavoratore( ..... );
    persone[2] = new Studente( ..... );

    Questo è perfettamente lecito. Se invochi un persone[indice].aliquotaFiscale(), verrà eseguito il "giusto" metodo aliquotaFiscale per l'oggetto realmente istanziato che si trova a quell'indice dell'array.

    E il fatto che Persona abbia un comportamento (i metodi) tutto "concreto" rende l'uso di abstract poco sensato.


    Sì ma ripeto: stai usando un qualche libro o stai andando un po' a "tentativi" ?
    Perfetto! Quindi correggo anche la classe persona e tolgo quei metodi perché il senso dell'esercizio e che Persona deve essere una generalizzazione di Studente e Lavoratore. Facendo in questo modo il programmino avrebbe senso?

    Sto studiando sulle slide del mio professore che direi sono ben fatte, ma ripeto ho iniziato da poco...
    Se volete vedere il mio prof lo trovate qui https://www.youtube.com/watch?v=5CkmaJSLqlw

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.