^ Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 ^| | [[java:java-avancerede-klasser-final|forrige]] | Kapitel 21. Avancerede klasser | [[java:java-indre-klasser|næste]] | ---- ==== 21.3. Nøgleordet abstract ==== Noget der er erklæret //abstract// er ikke implementeret og skal defineres i en nedarvning. Det skrives i kursiv i UML-notationen. === 21.3.1. Klasser === En abstrakt klasse erklæres således public //abstract// class X { public void a() { ////..// } } Det er ikke tilladt at oprette objekter fra en abstrakt klasse public static void main(String args[]) { X x = new X(); //// ulovligt! X er abstrakt// I stedet skal man arve fra klassen public class Y extends X { } og lave objekter fra den nedarvede klasse: public static void main(String args[]) { X x; //// lovligt// x = new Y(); //// lovligt, Y er ikke abstrakt// Basisklasserne for IO-systemet, InputStream og OutputStream, abstrakte, fordi programmøren altid skal bruge en mere konkret klasse, f.eks. FileInputStream (se[[java:java-io-txt-analyse-appendix#java-io-txt-analyse-read-write|Afsnit 15.5.4]]). Det er lovligt (og nyttigt i visse tilfælde) at have variabler af en abstrakt klasse (det svarer til, at det er lovligt og nyttigt at have variabler af en interface-type). === 21.3.2. Metoder === En metode erklæret abstract har et metodehoved, men ingen krop. Den kan kun erklæres i en abstrakt klasse public abstract class X { public //abstract// void a(); } Nedarvede klasser skal definere de abstrakte metoder (eller også selv være abstrakte) public class Y extends X { public void a() { ////..// } } ---- | [[java:java-avancerede-klasser-final|forrige]] | [[java:index|hjem]] | [[java:java-indre-klasser|næste]] | | Nøgleordet final | [[java:java-avancerede-klasser|op]] | Indre klasser |