2010-12-28 4 views
0

Wenige Fragen zum Überfahren.Override-Methode, um einen anderen Satz von Delimitern an den Scanner zu übergeben

Ich interessiere mich für eine Methode openRead aus einer anderen Klasse, die Methode wird überschrieben, so dass die Scanner-Klasse das angegebene Delimiter-Muster verwendet, das referenziert wird. Ich muss die Verwendung der Scanner-Klasse useDelmiter Methode

Methode von einer anderen Klasse

public boolean openRead() throws FileNotFoundException 
{ 
    sc = new Scanner(new File(fileName)); 

    if (fileName != null) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

} 

Begrenzer

protected final String DELIMITERS = "[\\s[^'a-zA-Z]]"; 

ich ratlos bin machen, wie ich das über fahren die konstante Trennzeichen .

+2

Drei Monate und vier vorherigen Fragen in Bezug Sie wirklich, wirklich sollte Formatieren Sie den Code jetzt korrekt, anstatt andere zu bereinigen. Rechts neben dem Feld "Frage stellen" befindet sich ein Link mit der Aufschrift "Wie formatiere ich?". Es lohnt sich, es zu lesen, es zeigt Ihnen genau, was Sie in einer schnell zu betrachtenden Liste tun müssen. Die erweiterte Version ist hier: http://stackoverflow.com/editing-help –

+0

Ihr Titel und Ihre Frage scheinen nicht übereinzustimmen, oder ich könnte nur falsch verstehen, was Sie fragen. – jzd

Antwort

1

Sie wollen nur die überschriebene Version ein anderes Trennzeichen für die Scanner verwenden? Ich schlage vor, einen Blick auf die Scanner API zu werfen, da es dokumentiert, wie man ein anderes Begrenzermuster verwendet.

public boolean openRead() throws FileNotFoundException 
{ 
    boolean result = super.openRead(); 
    sc.useDelimiter(DELIMITERS); 
    return result; 
} 

bearbeiten

Oder vielleicht nur wissen Sie nicht, was überwiegende in Java ist, und dass für Sie sollten mehr in den Java tutorials lesen.

Aber im Grunde, wenn Sie etwas Klasse hatte:

public class ScannerUserParent 
{ 
    protected Scanner sc; 
    private String filename = null; 

    // all that other stuff like constructors... 

    public boolean openRead() throws FileNotFoundException 
    { 
     sc = new Scanner(new File(fileName)); 

     if (fileName != null) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

Sie dann diese Klasse eine Unterklasse (oder extends):

public class ScannerUserChild extends ScannerUserParent 
{ 
    protected final String DELIMITERS = "[\\s[^'a-zA-Z]]"; 

    // stuff like constructors... 

    public boolean openRead() throws FileNotFoundException 
    { 
     boolean result = super.openRead(); // we are calling the parent's openRead() method to set up the Scanner sc object 

     sc.useDelimiter(DELIMITERS); 
     return result; 
    } 
} 

Allerdings gibt es andere Dinge, die Sie tun genau das verhindern kann, Dies. Wenn beispielsweise das Element sc der Bereich private ist, kann die Unterklasse es nicht direkt auf die Weise verwenden, die ich gezeigt habe.

In meinem Beispiel verwendet scprotected Zugriff, so dass die Klasse und ihre Unterklassen es verwenden können.

Im Fall gibt es eine privateScanner, und die Eltern unter der Annahme hat eine getScanner() Methode, die Ihnen Scanner zurückgibt, können Sie dies tun:

public boolean openRead() throws FileNotFoundException 
    { 
     boolean result = super.openRead(); // we are calling the parent's openRead() method to set up the Scanner sc object 
     Scanner sc = getScanner(); 
     sc.useDelimiter(DELIMITERS); 
     return result; 
    } 
+0

Das sc-Mitglied ist privat, also verstehe ich, dass ich eine Get-Methode verwenden müsste? – user445714

+0

@ user445714 - Ja, wenn es 'privat' ist, besteht eine Option darin, eine Getter-Methode zu verwenden, um auf das Objekt zuzugreifen. – birryree

+0

ist es möglich, die obige openRead-Methode mit einem Getter zwischen den booleschen Ergebnissen und dem sc.useDelimiter zu verwenden? – user445714

Verwandte Themen