Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema extend

  1. #1

    Problema extend

    Salve ho un problema che non riesco a capire ho 2 classi Poligono e Quadrato che la estende :

    codice:
    public abstract class Poligono{
      
      protected String nome ;
      protected int lati ;
      
      public Poligono(String nome , int lati){
         // con l'operatore this accedo alla variabile della classe 
         this.nome = nome  ;
         this.lati = lati  ;
      
      }
    
      protected abstract int area() ;
      
      
      public  String info(){
          // String str = "" + this.lati ;
          return "Nome Poligono : " + this.nome +
                 "Numero di lati :" + Integer.toString(this.lati); 
      
      }
    
    
    
    
    }



    codice:
    class Quadrato extends Poligono{
      
       private sting l ;
      
      public Quadrato(int p_l){
            super("Quadrato",4) ;
            l=p_l ;
            
      }
      
      public int area(){
      
       return l*l ;
      
      }
    
    }
    Se super ("Quadrato",4)
    lo metto sotto a : l=pl
    mi da errore in compilazione, perchè ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Per farla breve:
    "super" se viene richiamato nel costruttore va sempre fatto (obbligatoriamente) come prima istruzione.

    Ti rimando inoltre a un'altra discussione simile su questo forum link



  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    Per dare una spiegazione in più:

    Quando l'istruzione super viene utilizzata per richiamare il costruttore della classe base (quindi, sei obbligatoriamente dentro al costruttore della derivata), essa deve essere obbligatoriamente la prima istruzione del costruttore. Il motivo è semplice: per costruire la tua classe Quadrato, deve necessariamente essere prima costruito un oggetto di tipo Poligono. Se la classe base possiede un costruttore di default (no-arg), l'istruzione "super()" viene automaticamente aggiunta sottobanco dal costruttore; quando la classe base non prevede un costruttore no-arg, tale istruzione deve essere esplicitamente richiamata dal programmatore e deve essere fatta prima di ogni altra cosa.

    La possiamo vedere anche dall'altro lato: perchè non posso richiamare il costruttore (tramite super) in un punto qualunque del costruttore della derivata? Perchè qualunque istruzione precedente a super si riferirebbe ad elementi della classe derivata, che ancora non può essere costruita in mancanza della costruzione della classe base.

    Sono stato sufficientemente contorto?

    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

  4. #4
    Si e almeno per me il concetto è + chiaro usando il metodo inverso grazie....

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.