Professional Documents
Culture Documents
}
System.out.println("Instrument.play()");
– Nem, mert akkor minden egyes hangszerre kellene
}
class Wind extends Instrument {
public class Music { külön tune metódus!
public static void tune(Instrument i) {
public void play(Note n) {
System.out.println(
}
i.play(Note.MIDDLE_C);
– Sőt, ha újabb hangszert szeretnénk hozzáadni, akkor
"Wind.play()");
}
public static void main(String[] args) {
Wind flute = new Wind();
mindig új metódus is kell (karbantarthatóság)!
}
tune(flute); // Upcasting
}
}
ennek az ellenőrzéséhez sok tesztelés szükséges – Csak deklarációja van (nincs definíciója – törzse)
– Magából az ősosztályból valójában nem kellene, hogy Ha egy osztálynak van legalább egy absztrakt
létrejöjjön objektum metódusa, akkor neki is absztraktnak kell lennie
Ezért bevezették az absztrakt osztályokat és Egy osztály lehet absztrakt akkor is, ha nincs absztrakt
metódusokat (fordítási időbeni ellenőrzés) metódusa
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 25. 121 2002. 03. 25. 122
© Ferenc Rudolf © Ferenc Rudolf
Futás közbeni típusazonosítás
RTTI – Run-time type identification
z Upcast (ősre konvertálás)
– Elveszítjük a konkrét típust
– A konverzió biztonságos Interfészek és belső osztályok
z Downcast (leszármazottra konvertálás)
– Jó lenne visszanyerni a konkrét típust
– A konverzió egyéb nyelvekben nem biztonságos
– Java-ban ellenőrizve van (RTTI): Ha nem megfelelő
típusra próbálunk downcast-olni akkor egy
ClassCastException típusú kivétel dobódik
}
System.out.println(Arrays.equals(a1,a2)); – Két módszer van rá: Comparable és Comparator
}
Tömbök másolása
System.arraycopy() statikus metódus
z Meg van valósítva minden primitív típusra és az
Object-re (csak a referenciák másolódnak!)
public class CopyingArrays {
public static void main(String[] args) {
int[] i = new int[25];
int[] j = new int[25];
/*...*/
System.arraycopy(i, 0, j, 0, i.length);
/*...*/
}
}