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

    ereditarieta` e polimorfismo

    Ciao a tutti,
    scrivo uno pseudo Java per definire un esempio:
    codice:
    A{
     private FieldA field;
    
     public addFieldtoC(){this.field.addtoC();)
    }
    
    B extends A{
     private FieldB field;
    }
    
    FieldA{
     implementazione di addtoC();
    }
    
    FieldB extends FieldA{
     implementazione di addtoC();
    }
    Se creo un oggetto di tipo B e faccio la B.addFieldtoC, in C viene inserito un oggetto di tipo FieldA o FieldB?
    Io direi FieldA...quindi, esiste un modo per ereditare in B la addFieldtoC definita in A che pero` si accorga che la variabile d'istanza di B e` una sottoclasse di quella di A e quindi mi vada ad usare la addtoC di FieldB?

    Spero di essere stato abbastanza chiaro, altrimenti ditemelo che provo a riscrivere il tutto.

    Ciao e grazie in anticipo
    Quanti programmatori sono necessari per cambiare una lampadina?
    Nessuno, e' un problema hardware.

  2. #2
    Ma se io ho:
    codice:
    class A {
      private int a=3;
      private void stampa() {
       System.out.println(a);
     }
    }
    class B extends A {
      private int a=4;
      public static void main(String[] args) {
         (new B()).stampa()
      }
    }
    Il valore che dovrebbe stampare dovrebbe essere 4 perché ad a è applicato l'override ed ereditanto il metodo stampa non dovrebbe chiamare a overriddato, però richiama quello in A come mai? (mi sa perché l'override funziona solo sui metodi)

    Ho risolto modificando a senza ricrearlo in B.
    Forza Napoli!

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    @Mercuzio:
    La cosa si risolve semplicemente facendo sì che il campo "field" della classe base (A) non sia privato, ma protected. Conseguentemente, la classe derivata (B) ha visibilità su tale campo e può valorizzarlo con l'istanza concreta della sottoclasse (FieldB), invece di creare un nuovo campo privato che "nasconde" di fatto quello originario. A questo punto, il metodo funziona in modo assolutamente trasparente ed effettuerà esattamente quanto richiesto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.