# Was ist genau eine Abstraktion in java



## medicus (18. Feb 2010)

hallo leute.ich lern grad ein bisschen grad für java und bin grad bei der objektorintierten programmierung angekommmen wo ich auf folgende eigenschaften gekommen bin.

1.Abstraktion
2.Kappselung
3.Vererbung
4.Polymorhismus

zu1)
abstraktion:allgemeine klasse zu der keinen objekte existieren

zu 2)
Kappeslung: Zusammen methoden und Objekten=> funktionen und daten bilden integrale einheit

zu 3)
Vererbung: methoden und attribute werden von einer oberklasse geerbt=> unterklasse kann darauf zugreifen als ob die eigenen attribute wären

zu 4)

Polymorhismus:
Objekte verschiedener klassen verhaltenn sich beim gleichen funktionsaufruf gleich


mein problem besteht im wesentlichen darin:
a) was ist eine abstraktion in java.warum wird sie gemacht?was hab ich mir darunter vorzustellen?
ein beispiel wäre nicht schlecht?
der rest ist im wesentlichn klar allerdings würden auch beispile helfen


vielen dank für hilfe 
beste grüße+
medicus


----------



## Landei (18. Feb 2010)

Für viele Zwecke wäre eine Klasse "Fahrzeug" zu allgemein. Man kann zwar schon gewisse Methoden oder Eigenschaften (z.B. Höchstgeschwindigkeit) implementieren, aber nicht alle. Ein LKW hat andere Eigenschaften wie ein PKW. Eine Methode "schießen" hätte an einem Fahrzeug wenig Sinn, höchstens an einem Panzer. Deshalb würde man in Java die Klasse Fahrzeug wahrscheinlich als abstrakte Klasse implementieren, und die "Details" den Unterklassen überlassen.


----------



## bygones (18. Feb 2010)

wobei eine Abstraktion nicht immer eine abstrakte klasse ist... es ist allgemein eine loesung von einer konkreten Loesung bzw konkreten Implementierung


----------



## Landei (19. Feb 2010)

Richtig. Man kann z.B. Generics als eine weitere Art der Abstraktion sehen: So kann man etwa eine collection-artige Klasse schreiben, ohne den exakten Typ der Elemente zu kennen, oder abstrakte Operationen darauf definieren:


```
interface Transformer<A,B> {
   public B convert(B b);
}

class Mapper {
   public static <A,B> List<B> map(List<A> list, Transformer<A,B> t) {
       List<B> result = new ArrayList<B>();
       for(A a: list) { result.add(t.convert(a)); }
       return result;    
   }
}

...
List<String> strings = ...
List<Integer> ints = Mapper.map(strings, new Transformer<String, Integer>() { 
   public Integer convert(String s){ return s.length(); }});
```


----------

