Hallo Zusammen,
Möchte wissen, wieso ich diese Klasse in folgendem Code-Beispiel normal benutzen kann (und auch sonst), ohne die Klasse zu erweitern und die Methoden zu implementieren, obwohl die Klasse und gewisse Methoden (next() und first()) doch als abstract markiert sind? Habe gelernt, dass man Abstrakte-Klassen erweitern "muss". Auch in der Klassendeklaration BreakIterator.class existiert gar kein Methodenkopf (Bsp. public abstract int next(); )! Wie kann der Code dann funktionieren? Mach ich irgend einen Denkfehler?
Code:
import java.text.BreakIterator;
import java.util.*;
public class WhereHaveYouBeen {
public static void main( String[] args ) {
Set<String> allCities = new HashSet<>();
allCities.add( "Sonsbeck" );
allCities.add( "Düsseldorf" );
allCities.add( "Manila" );
allCities.add( "Seol" );
allCities.add( "Siquijor" );
Set<String> visitedCities = new TreeSet<>();
String sentence = "Von Sonsbeck fahre ich nach Düsseldorf und fliege nach Manila.";
BreakIterator iter = BreakIterator.getWordInstance();
iter.setText( sentence );
for ( int first = iter.first(), last = iter.next();
last != BreakIterator.DONE;
first = last, last = iter.next() ) {
String word = sentence.substring( first, last );
if ( allCities.contains( word ) )
visitedCities.add( word );
}
System.out.println( "Anzahl besuchter Städte: " + visitedCities.size() );
System.out.println( "Anzahl nicht besuchter Städte: " +
(allCities.size() - visitedCities.size()) );
System.out.println( "Besuchte Städte: " + String.join( ", ", visitedCities ) );
Set<String> unvisitedCities = new TreeSet<>( allCities );
unvisitedCities.removeAll( visitedCities );
System.out.println( "Unbesuchte Städte: " + String.join( ", ", unvisitedCities ) );
}
}
Danke für die Hilfe.
Gruss
xerxes24
Möchte wissen, wieso ich diese Klasse in folgendem Code-Beispiel normal benutzen kann (und auch sonst), ohne die Klasse zu erweitern und die Methoden zu implementieren, obwohl die Klasse und gewisse Methoden (next() und first()) doch als abstract markiert sind? Habe gelernt, dass man Abstrakte-Klassen erweitern "muss". Auch in der Klassendeklaration BreakIterator.class existiert gar kein Methodenkopf (Bsp. public abstract int next(); )! Wie kann der Code dann funktionieren? Mach ich irgend einen Denkfehler?
Code:
import java.text.BreakIterator;
import java.util.*;
public class WhereHaveYouBeen {
public static void main( String[] args ) {
Set<String> allCities = new HashSet<>();
allCities.add( "Sonsbeck" );
allCities.add( "Düsseldorf" );
allCities.add( "Manila" );
allCities.add( "Seol" );
allCities.add( "Siquijor" );
Set<String> visitedCities = new TreeSet<>();
String sentence = "Von Sonsbeck fahre ich nach Düsseldorf und fliege nach Manila.";
BreakIterator iter = BreakIterator.getWordInstance();
iter.setText( sentence );
for ( int first = iter.first(), last = iter.next();
last != BreakIterator.DONE;
first = last, last = iter.next() ) {
String word = sentence.substring( first, last );
if ( allCities.contains( word ) )
visitedCities.add( word );
}
System.out.println( "Anzahl besuchter Städte: " + visitedCities.size() );
System.out.println( "Anzahl nicht besuchter Städte: " +
(allCities.size() - visitedCities.size()) );
System.out.println( "Besuchte Städte: " + String.join( ", ", visitedCities ) );
Set<String> unvisitedCities = new TreeSet<>( allCities );
unvisitedCities.removeAll( visitedCities );
System.out.println( "Unbesuchte Städte: " + String.join( ", ", unvisitedCities ) );
}
}
Danke für die Hilfe.
Gruss
xerxes24