Fragen vom Java Anfänger

theSonGoku

Neues Mitglied
Hallo,

ich habe mir vor geraumer Zeit das Buch "Einstieg in Java 6" gekauft (19,99€) und bin über die ersten 100 Seiten hinweg.^^ Alles soweit nichts Neues für mich gewesen, da ich bereits Delphi, C, C++ und Assembler Vorkentnisse habe.

Wenn es um den Punkt "objektorientiere Programmierung" geht, stehe ich zwar nicht komplett auf dem Schlauch, es gibt aber einige Begriffe, die mir auch nach mehrfachen durchlesen nicht wirklich Erklärung boten.

- Innere Klasse
- Abstrakte Klassen
- Interfaces
- Generische Klassen
- Polymorphie

Muss ich diese Begriffe wirklich kennen/können? Wenn ja, dann helft mir bitte. Vielleicht ist eure Erklärung ja einfacher oder verständlicher, als die Erklärung im Buch. 🙂

mfG
Goku
 
Die Kurzversion:

- Innere Klasse
Eine Klasse, die innerhalb einer anderen Klasse definiert ist. Hat Zugriff auf die Felder der umgebenden Klasse (es sei denn, sie ist als static deklariert)

- Abstrakte Klassen
Eine Klasse, die nicht alle Methoden definiert hat. Davon kann man zwar keine Instanzen erzeugen, aber man kann davon andere Klassen ableiten, die dann die fehlenden Methoden definieren. Dient also als eine Art "nützliche Schablone".

- Interfaces
Ein Interface definiert einen Typ, der bestimmte Methoden anbietet. Eine Klasse, die Interfaces implementiert, muss auch die dazugehörigen Methoden defininieren. Instanzen dieser Klasse können dann auch da verwendet werden, wo nicht der Typ der Klasse selber, sondern eines der Interfaces "verlangt" wird. Typisches Beispiel: Klassen die das Interface Comparable (mit einer Vergleichsmethode) implementieren, können z.B. von anderem Code sortiert werden, ohne dass dieser Klasseninterna kennen muss.

- Generische Klassen
Eine Klasse mit Typ-Parametern. Statt z.B. einen eigene Listen-Klasse für Strings, eine Listen-Klasse für Dates, eine Listen-Klasse für Files u.s.w. zu schreiben, schreibt man eine einzige Klasse für einen unbekannten Typen "T". Erst wenn man ein Listen-Objekt erstellt, sagt man, welcher konkrete Typ für T eingesetzt werden soll. C++-Templates sind ähnlich, aber anders implementiert (z.B. lässt sich in Java der Code nicht spezialisieren, er muss für alle Belegungen von T gleich sein). Für T lassen sich gewisse Beschränkungen angeben (z.B. T muss ein bestimmtes Interface implementieren, oder Unterklasse von Number sein u.s.w.)

- Polymorphie
Es gibt verschiedene Arten der Polymorphie, z.B. durch Vererbung oder durch Typ-Parameter (Generics). In funktionalen Sprachen sind z.B. Funktionen höherer Ordnung eine Form der Polymorphie. Siehe Polymorphie (Programmierung) ? Wikipedia
 
Zuletzt bearbeitet:
Hi

ichs versuchs mal mit beispielen:

abstrakte K: Fahrzeug ...davon abgeleitet dann KFZ , LKW usw. von Fahrzeug allein kannst wie gesagt keine Objekte erstellen

Interface : da keine Mehrfachvererbung erlaubt ist, wie du sie von C++ kennen könntest, wird das in JAva mit den Interfaces gelöst. In dem I. stehen dann nur die Methodenrümpfe drin, die implementiert werden müssen. Ist also "schwächer" als extends. Sagen wir du leitest von deinem Fahrzeug von oben nen KFZ ab, dann willst du es geländegängig haben - implements gelände, in gelände stehen dann Methodenrümpfe z.b. winde hoch oder allrad rein, die du dann in deinem KFZ implementieren musst.
D.h. ne Klasse mit implements X hat "Vorschriften" durch X welche Methoden drinne sein müssen aber NICHT was die zu machen haben ;-)

G-Klassen : stells dir als Container vor, wo erstmal alles gespeichert werden kann

Polymorphie ist nervig zu beschreiben. Das ist meines Wissens nach z.b. der Grund warum Mehrfachvererbung verboten ist, in C++ kann man damit schlimme Sachen verbocken^^
Angenommen eine Klasse rechnen rechnet Rauminhalte von Dreicken, Rechtecken usw. aus. Wenn jetzt ein Rechteck - Objekt aufruft, wird automatisch die richtige Formel genommen, durch die Polymorphie.



Alles in allem sind das alles Dinge, die man besser mal anwendet, irgendwann hast du nen Problem das ohne diese Dinge sehr schwer zu lösen wäre. Am besten ist es immer du quälst dich nen paar Tage rum, dann fragst jemanden und ärgerst dich das es eigentlich so einfach gewesen wäre 🙂 und lernst nebenbei ne Menge ^^
 
Nicht schlecht, aber:

Interface : da keine Mehrfachvererbung erlaubt ist, wie du sie von C++ kennen könntest, wird das in JAva mit den Interfaces gelöst. In dem I. stehen dann nur die Methodenrümpfe drin, die implementiert werden müssen.
Die Rümpfe nun gerade nicht, nur die Methodenköpfe (oder auch "Methoden-Signaturen")

Polymorphie ist nervig zu beschreiben. Das ist meines Wissens nach z.b. der Grund warum Mehrfachvererbung verboten ist, in C++ kann man damit schlimme Sachen verbocken^^
Angenommen eine Klasse rechnen rechnet Rauminhalte von Dreicken, Rechtecken usw. aus. Wenn jetzt ein Rechteck - Objekt aufruft, wird automatisch die richtige Formel genommen, durch die Polymorphie.
Das ist nur eine Form, nämlich die Vererbungs-Polymorphie. Es gibt andere Formen wie Generics oder Operatorüberladungen.
 
@apio:

Es ist schon oft so gewesen, dass ich solche Sachen einfach angewandt habe, und später laß, dass dies einen bestimmten Namen hat etc.^^ Irgendwie ging es so auch immer. 😛

Ich sehe mal wie es aussehen wird. Das Kapitel "Rechenoperatoren" kann ich nun erstmal komplett überspringen.^^

Jemand könnte mir allerdings sagen, was sowas bedeuten soll:

j = i | 1
j = i ! 1
j = i ^ 1

So, ich werde dann mal eben wieder von dannen ziehen. 😉

Danke schonmal für die bereits geschriebenen Antworten und die noch kommenden. 🙂

mfG
Goku
 
1. i bitweise oder Verknüpft: Wenn i z. B. den Wert 4 hat, dann ist das im Binaärsystem so geschrieben: 100
dann wird 100 und 001 (die zweite Zahl der Operation) zu 101 weil 1 oder 0 = 1; 0 oder 0 = 0; 0 oder 1 = 1; -> 101 -> 5
2. Geht gar nicht
3. Das selbe wie bei eins, einfach statt oder wird xor genommen. xor bedeutet bei 1 und 0 = 1; bei 0 und 1 = 1; bei 0 und 0 = 0; bei 1 und 1 = 0;
 

Neue Themen


Zurück
Oben