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

    [Java] riferimento super come invocazione metodo

    Ciao!
    Nonostante io abbia letto il tutorial e altri esempi, non riesco proprio a capire come funziona il comando super

    Ho capito che utilizzandolo si richiama il metodo precedentemente definito in un'altra classe, che nell'attuale classe è stato ridefinito. Ho provato a scrivere un pezzo di codice in cui utilizzo il metodo read() della classe Reader, però non funziona!


    Sto cercando di leggere caratteri dalla tastiera e memorizzarli in una stringa che comparo poi con la parola "ciao", se nella stringa non scrivo ciao la classe ridefinita read() mi rimanda a super.read(), che in realtà dovrebbe leggermi il carattere in ingresso. Invece viene segnalato questo errore:
    codice:
    Exception in thread "main" java.lang.NoSuchMethodError: main
    Cosa c'è che non va?

    Questo è il codice:

    codice:
    import java.io.*;
    import static java.lang.System.in;	
    import java.lang.*;
    
    
    public abstract class Prova_super extends Reader {
    
    
    public boolean match(String str) throws IOException {
    
    boolean a;
    
    
    StringBuilder stringa = new StringBuilder();
    char ch;
    
        Reader in = new InputStreamReader(System.in);
    
          do{
          stringa.append((char)in.read());
           if(str.equals(stringa))
            a=true;
           else{ 
            a=false;
         }
    }
          while(in.ready());
    
    
    return a;
    
    }
    
    
    
    public int read() throws IOException {
    
        if (match("ciao"))
    	  return VAR;
        if (match("buongiorno"))
        return super.read();  
    
    }
    
      public static final int VAR = Integer.MIN_VALUE;
    
      public void main(String[] args) throws IOException { 
    
        int ch;
    
          while ((ch = read()) != 13) {
            switch (ch) {
              case VAR:
                 System.out.print("ciaoo");
                break;
              default:
                System.out.print("buongiorno");
            }
          }
    
    
       }
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    La firma del main() è:
    codice:
    public static void main(String[] args)
    Come seconda cosa, il "comando super", che è una parola chiave non funziona proprio come dici.
    Viene utilizzata in particolar modo nelle gerarchie di ereditarietà, per chiamare il costruttore della superclasse e passargli gli elementi da inizializzare.
    codice:
    class A {
      private String a;
      
      A(String a) {
        this.a = a;
      }
    
      String getA() {
        return a;
      }
    }
    
    class B extends A {
      private String b;
      
      B(String a, String b) {
        super(a);
        this.b = b;
      }
    
      String getB() {
        return b;
      }
    }
    E viene anche utilizzato per chiamare il metodo di una superclasse, vedi ad esempio questo utilizzo:

    codice:
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      //.....
    }


    Perchè dichiarare la classe abstract?

  3. #3
    Perchè se non scrivo abstract mi da quest'errore:

    codice:
    Prova_super.java:6: Prova_super is not abstract and does not override abstract method close() in java.io.Reader

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Le classi abstract per definizione, dichiarano la firma del metodo, ma non il suo corpo. E' compito delle classi che le estendono fornire una loro versione di tali metodi.

    Se vuoi usare super crea una tua gerarchia di ereditarietà, oppure cerca qualche esercizio in rete.

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.