Ich habe eine Frage über die Verwendung von Datenstrukturen wie ArrayLists in einer einfachen Vererbungsstruktur. Es fällt mir schwer, es zu formulieren: Hoffentlich kannst du verstehen, was ich zu fragen versuche.Verwenden von ArrayLists in Superklasse/Unterklassenframework
Ich habe eine Superklasse Parrot
und eine Subklasse PirateParrot
Erweiterung Parrot
. In Parrot
habe ich die folgende Methode:
public String speak() {
int rand = (int)(Math.random() * sounds.size());
return sounds.get(rand);
}
, die eine zufällige Zeichenfolge in einer Arraylist zurück sounds
genannt, die in der Parrot
Klasse erstellt wird.
Wenn ich eine separate Instanz von PirateParrot
schaffen polly
genannt, was auch seine eigene Arraylist hat, und versuchen polly.speak();
ohne implizite Implementierung für die sprechen Methode aufzurufen in der PirateParrot
Klasse, erhalte ich eine „Exception in thread“ geworfen main“java.lang.IndexOutOfBoundsException: Index: 0, Größe: 0"
Wenn ich speziell kopieren/einfügen in der Methode sprich() von Parrot
in PirateParrot
, wird der Code kompiliert fein und läuft einwandfrei. Was genau war das Problem zuvor? Gibt es eine Möglichkeit, dies korrekt auszuführen, ohne die speak() -Methode in PirateParrot
kopieren/einfügen zu müssen? Vielen Dank!
FYI, es ist fast sicher besser, 'Random.nextInt (sounds.size())' 'zu verwenden, was auch den Nebeneffekt haben würde, eine Ausnahme auszulösen, wenn' Sounds' leer ist - was zu sein scheint. –
Okay, ja, ich war mir nicht sicher über die richtige Syntax für Math.Random - danke. –