extrends vs. import

OliW

Aktives Mitglied
Hallo und allen schöne Feiertage,

ich habe eine Frage zu im Betreff genannten Keywords. Die Funktionsweisen und grundsätzlichen Unterschiede sind mit klar.
Die Unterschiede allerdings noch nicht so sehr.
Kann ich die Funktionalität einer Kindklasse ebenso aufrecht erhalten, wenn ich die Vererbung zur Vaterklasse aufhebe und die Vaterklasse stattdessen per import (import klasse.Vaterklasse) zur Vergügung stelle.
Wo genau liegt der Unterschied?
Ich habe das zwar in Eclipse ausprobiert, allerdings verwirren mich die Fehlermeldungen doch ziemlich. :)
v.D.

Gruß Oli
 
K

kneitzel

Gast
Ich bin mir gerade nicht sicher, ob ich Dich richtig verstanden habe. Ein Import macht ja eigentlich nichts, es verändert an der Funktionalität nichts.

Extends verändert aber die Funktionalität der Klasse.

Und nein, man kann das extends nicht anders abbilden. Spätestens etwas wie
Parent instanz = new Child();
Ist unmöglich.
 

Blender3D

Top Contributor
das heißt extends und nicht extrends.
extends ist für die Vererbung. Man kann damit bestehende Klassen erweitern.
Import hat mit Vererbung nichts zu tun. Damit kann man Pakete oder Klassen importieren (zuladen).
 

OliW

Aktives Mitglied
Ich bin mir gerade nicht sicher, ob ich Dich richtig verstanden habe. Ein Import macht ja eigentlich nichts, es verändert an der Funktionalität nichts.

Extends verändert aber die Funktionalität der Klasse.

Und nein, man kann das extends nicht anders abbilden. Spätestens etwas wie
Parent instanz = new Child();
Ist unmöglich.

v.D. Stimmt << Parent instanz = new Child();>> ist ein gutes Argument. Mir leuchtet nur noch nicht ein wann man die Vererbung und wann den Import wählt. Denn ob ich nun << Parent instanz = new Child();>> oder gleich <<Child instance = new Child();>> verwende, spielt doch keine Rolle, oder? Wenn ich auf Methoden oder Variablen aus der Parentklasse zugreifen möchte würde ich einen Import machen und über << Parent.methodenname();>> oder <<Partent.variablenname; >> zugreifen.

Aber ich denke, ich habe hierfür einfach zu wenig Praxis. Das Grundprinzip habe ich verstanden und die tiefe Verständniss kommt wohl mit der Praxis.
 

White_Fox

Top Contributor
Extends wurde ja schon erklärt.
Import macht nichts anderes als z.B. include in C: Damit verweist du auf Klassen/Interfaces, die z.B. in einer Bibliothek definiert wurden.
Ansonsten würde z.B. eine Zeile wie GodClass instance = new GodClass(); sofort zu einem Fehler führen, weil der Compiler nicht weiß was GodClass sein soll. Der Import-Befehl sagt dem Compiler, wo er die notwendigen Informationen findet.
 

White_Fox

Top Contributor
Denn ob ich nun << Parent instanz = new Child();>> oder gleich <<Child instance = new Child();>> verwende, spielt doch keine Rolle, oder?
Doch...das kann, je nach Anwendungsfall, sogar eine sehr große Rolle spielen. Ein Child ist immer auch sein Parent, aber ein Parent niemals ein Child.
Beispiel: Du hast eine Klasse Panzer, eine Klasse PKW und eine Klasse Lastkraftwagen. Alle diese Klassen sind Kinder der Parentklasse Landfahrzeuge. Ein Panzer ist immer auch ein Landfahrzeug. Aber ein Landfahrzeug muß nicht unbedingt ein Panzer sein.

Aber mit Import hat das gar nichts zu tun.
 

OliW

Aktives Mitglied
Doch...das kann, je nach Anwendungsfall, sogar eine sehr große Rolle spielen. Ein Child ist immer auch sein Parent, aber ein Parent niemals ein Child.
Beispiel: Du hast eine Klasse Panzer, eine Klasse PKW und eine Klasse Lastkraftwagen. Alle diese Klassen sind Kinder der Parentklasse Landfahrzeuge. Ein Panzer ist immer auch ein Landfahrzeug. Aber ein Landfahrzeug muß nicht unbedingt ein Panzer sein.

Aber mit Import hat das gar nichts zu tun.

Das leuchtet auch völlig ein. Aber ich hänge gedanklich an folgendem Punkt. Was spricht dagegen, wenn ich einen Panzer möchte, eine Klasse hierfür mit den für den Panzer spezifischen Attributen und Methoden zu erstellen und mir die Attribute und Methoden für die Landfahrzeuge (wozu der Panzer ja gehört) über den Import der Klasse Landfahreuge zu holen. Damit hätte ich doch auch das Poblem mit dem Konstruktor umgangen, der ja nicht mitvererbt wird.
So richtige Sinn macht die Vererbung mit meinem bisherigen Wissen doch erst bei Vererbungsketten. Also z.b.
Landfahrzeuge >> Panzer >> Leopard. Obwohl ich bei Leopard doch auch Landfahrzeuge und Panzer importieren könnte.
 

White_Fox

Top Contributor
Nein. Mit dem Import-Befehl machst du dem Compiler klar, wo er die Klasse Landfahrzeuge findet. Das ist nützlich, wenn du die Klasse Landfahrzeuge verwendest.

Der Compiler weiß damit aber nicht, daß du von der Klasse Landfahrzeuge erben willst. Genau das aber macht das extends. Übersetze dir die Befehle doch mal ins Deutsche. Beide haben völlig andere Bedeutungen.
 

mrBrown

Super-Moderator
Mitarbeiter
Das leuchtet auch völlig ein. Aber ich hänge gedanklich an folgendem Punkt. Was spricht dagegen, wenn ich einen Panzer möchte, eine Klasse hierfür mit den für den Panzer spezifischen Attributen und Methoden zu erstellen und mir die Attribute und Methoden für die Landfahrzeuge (wozu der Panzer ja gehört) über den Import der Klasse Landfahreuge zu holen. Damit hätte ich doch auch das Poblem mit dem Konstruktor umgangen, der ja nicht mitvererbt wird.
Und jetzt baust du den TÜV ein, deine eine Hauptuntersuchung bei Landfahrzeugen durchführen kann hauptuntersuchung(Landfahrzeugen fahrzeug) {...}

Wenn dein Panzer Landfahrzeugen erweitert, kannst du der Methode auch Panzer übergeben. Wenn Panzer aber kein Landfahrzeug ist, sondern nur eins nutzt, kannst du keinen Panzer übergeben.

(Dies hier ist aber einen Blick für dich wert: https://de.wikipedia.org/wiki/Komposition_an_Stelle_von_Vererbung)

(Und btw: du solltest dicht nicht so sehr auf das Import-Statement konzentrieren, das gibt nur an, wo der Compiler nach benutzen Klassen sucht, wenn man keine fully qualified names angibt. Nach dem kompilieren ist von dem Import allerdings nichts mehr zu merken)
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Es wurde schon einiges gesagt, aber ich frage mich gerade, ob es evtl. bei Dir etwas um die Thematik inheritance vs. composition geht.

Inheritance bedeutet, dass eine Klasse von einer anderen erbt. D.h. man bekommt eine speziellere Version vom Original. Beispiele kann man sich schnell überlegen. man hat Lebewesen. Davon leitet sich Säugetier ab. Davon dann evtl. Mensch.

Die ganze Idee dabei ist, dass man z. B. mit Lebewesen agieren kann, ohne die genaue Spezifizierung zu kennen.

Aber Composition bedeutet etwas anderes. Da gehört etwas zu einer Klasse.
Ein Beispiel ist hier auch schnell gefunden: ein Flugzeug hat z.B. einen Höhenmesser.

Umgangssprachlich kann man hier einige Formulierungen finden, die typisch sind.
Bei einer extends oder implements Beziehung wäre das in der Umgangssprache eine ‚Ist ein‘ Beziehung:
Mensch ist ein Säugetier.
Säugetier ist ein Lebewesen.

Bei der Composition wäre das eine ‚hat ein‘ Beziehung. Flugzeug hat ein Höhenmesser.

Wenn man selbst etwas baut, dann ist es aber oft nicht eindeutig. In Foren findet sich das z.B. bei Spring Oberflächen:
Implementiere ich ein Fenster, das ein JFrame ist?
Oder habe ich ein Teil der Applikation, das ein JFrame hat?
Hier muss man dann für sich Reglungen finden. Es gibt oft kein wirkliches Richtig oder Falsch.

Aber Fakt ist: Das Imports bedeutet aus Java Virtual Machine nichts. Das soll nur dem Entwickler helfen. Wozu immer Klassen mit vollem Paketnamen nennen? Entwickler sind faul und wollen übersichtlichen Code. Also will ein Entwickler nicht ständig my.cool.packages.MyClass schreiben. Also kommt da einmal oben am Anfang ein Import dafür und dann nutzt man nur noch MyClass. Also für den Code bedeutet das nichts, nur für die Schreibweise.
 

OliW

Aktives Mitglied
Die ganze Idee dabei ist, dass man z. B. mit Lebewesen agieren kann, ohne die genaue Spezifizierung zu kennen.

Aber Composition bedeutet etwas anderes. Da gehört etwas zu einer Klasse.
Ein Beispiel ist hier auch schnell gefunden: ein Flugzeug hat z.B. einen Höhenmesser.

Umgangssprachlich kann man hier einige Formulierungen finden, die typisch sind.
Bei einer extends oder implements Beziehung wäre das in der Umgangssprache eine ‚Ist ein‘ Beziehung:
Mensch ist ein Säugetier.
Säugetier ist ein Lebewesen.

Bei der Composition wäre das eine ‚hat ein‘ Beziehung. Flugzeug hat ein Höhenmesser.

Danke. Jetzt ist ein Groschen gefallen um die " Denkblockade" zu lösen. Das mit dem "Ist ein" und "hat ein" ist gut. Und auch Deine Aussage, daß es beim "selber Bauen" nicht immer so klar und eindeutig ist, bestätigt meine eigene Annahme.

Vielen Dank für eure Antworten.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
F Import SSL Zertifikat in keystore Java Basics - Anfänger-Themen 10
M import com.sun.star.uno Java Basics - Anfänger-Themen 25
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
java-starter Erste Schritte import von package Java Basics - Anfänger-Themen 4
J The import org.bukkit cannot be resolved Java Basics - Anfänger-Themen 3
E Paketstruktur und import Klauseln Java Basics - Anfänger-Themen 14
D import Befehle Java Basics - Anfänger-Themen 3
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
O Package import-Klausel Java Basics - Anfänger-Themen 10
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
W JavaFX import Fehler/Zellularautomaten Java Basics - Anfänger-Themen 1
T Erste Schritte JAR import Fehler Java Basics - Anfänger-Themen 2
Textsurfer Erste Schritte CSV Import Reader Writer Java Basics - Anfänger-Themen 0
S BufferedReader TextFields Import Java Basics - Anfänger-Themen 5
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G import utils.SourceHandler; Java Basics - Anfänger-Themen 5
L Klasse/Variable import Java Basics - Anfänger-Themen 7
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
slejden Erste Schritte der Befehl import Java Basics - Anfänger-Themen 2
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
B Erste Schritte Way of life ohne import - Habe Beispiel, macht Unfug Java Basics - Anfänger-Themen 21
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
I DATEV import / export Java Basics - Anfänger-Themen 2
O Probleme beim import von Projekten in Eclipse Java Basics - Anfänger-Themen 7
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
F Import von Zip-Datei in Eclipse Java Basics - Anfänger-Themen 1
? Klassen Verständnisprobleme mit Import Anweisungen Java Basics - Anfänger-Themen 6
FINF_AW_Alex import funktioniert nicht Java Basics - Anfänger-Themen 4
A Import anderer Classen aus anderen Projekten Java Basics - Anfänger-Themen 6
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
M import von eigener Klasse Java Basics - Anfänger-Themen 12
S import java.*; vs import java.awt.TextArea Java Basics - Anfänger-Themen 7
B ThreadPoolExecutor - import java.util.concurrent Java Basics - Anfänger-Themen 2
F import Prog1Tools.IOTools Java Basics - Anfänger-Themen 9
J Aus "import" die genutzte Library erfahren Java Basics - Anfänger-Themen 4
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
E Erste Schritte Import von Klassen Java Basics - Anfänger-Themen 8
B Compiler-Fehler import java.io.*; führt zu error Java Basics - Anfänger-Themen 2
N Probleme mit dem Import Java Basics - Anfänger-Themen 8
J ORACLE Spatial ungültiger Spaltenindex beim Import Java Basics - Anfänger-Themen 2
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
D Geschwindigkeits unterschied bei import? Java Basics - Anfänger-Themen 13
C import Java Basics - Anfänger-Themen 7
O Compiler-Fehler import funktioniert nicht Java Basics - Anfänger-Themen 2
D Import von import org.apache.commons.math3...... Java Basics - Anfänger-Themen 2
J Import in Java Java Basics - Anfänger-Themen 4
A Import Anwendungen Java Basics - Anfänger-Themen 2
D Frage zu der import Anweisung in Java Java Basics - Anfänger-Themen 15
S Erste Schritte import für andere Klassenfiles verfügbar machen? (Java unter Eclipse) Java Basics - Anfänger-Themen 8
F Problem mit import Java Basics - Anfänger-Themen 8
C Umgebungsvariable import anweisung gibt fehlermeldung Java Basics - Anfänger-Themen 2
algebraiker Textdatei-Import Java Basics - Anfänger-Themen 8
T .Java Import Java Basics - Anfänger-Themen 19
N Erste Schritte import javax.media.3d....; //Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 10
N Import Problem, Applet will nicht Java Basics - Anfänger-Themen 6
Q Classpath Package import Java Basics - Anfänger-Themen 6
J Erste Schritte import awt.* ;awt.event.*; Java Basics - Anfänger-Themen 3
B Wie funktioniert der Import von Dritt-packages in Eclipse? Java Basics - Anfänger-Themen 5
C Fehlermeldung "The import TestProjekt cannot be resolved". Warum? Java Basics - Anfänger-Themen 7
W Problem beim CSV-Import Java Basics - Anfänger-Themen 5
K Collections Problem beim import von Packages Java Basics - Anfänger-Themen 10
F Import mit .* oder nicht? Java Basics - Anfänger-Themen 3
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
F Problem mit "import" Java Basics - Anfänger-Themen 9
M Import Unicode Textfile Java Basics - Anfänger-Themen 10
S import - Anweisung; Setzen der Classpath Java Basics - Anfänger-Themen 2
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
K OOP Java import zwei gleichnamiger Klassen Java Basics - Anfänger-Themen 5
M JS Import aus externer Jar Datei Java Basics - Anfänger-Themen 5
D OpenCSV Fehllender Konstruktor trotz import und Buildpath Eintrag Java Basics - Anfänger-Themen 1
M import einer Grafik aus .jar funktioniert nicht Java Basics - Anfänger-Themen 6
1 JMF Import Problem Java Basics - Anfänger-Themen 3
D import-fehlermeldung Java Basics - Anfänger-Themen 3
M java erkennt import-klassen nicht?! Java Basics - Anfänger-Themen 39
K OOP import Java Basics - Anfänger-Themen 13
B import Anweisung Java Basics - Anfänger-Themen 2
D OOP Pakete Import Java Basics - Anfänger-Themen 15
T Netbeans: Import von Externen Packet Java Basics - Anfänger-Themen 5
T Import von org.* Java Basics - Anfänger-Themen 6
E Frage zu "import" Java Basics - Anfänger-Themen 5
J Import von Paketen Java Basics - Anfänger-Themen 10
U2nt import wird nicht "angenommen" Java Basics - Anfänger-Themen 9
F import Statement für Klassen die dem default Package zugeordnet sind? Java Basics - Anfänger-Themen 2
O import ja....extends nein Java Basics - Anfänger-Themen 5
T The import In cannot be resolved Java Basics - Anfänger-Themen 31
X Befehl import Java Basics - Anfänger-Themen 21
T import java.util.scanner cannot be resolved Java Basics - Anfänger-Themen 19
G JAR ohne import in anderer JAR aufrufen Java Basics - Anfänger-Themen 3
S BITTE UM HILFE HASHTABLE/import java.util.Hashtable in Ecplipse Java Basics - Anfänger-Themen 12
E import org.eclipse.swt.Events.PaintListener; Java Basics - Anfänger-Themen 1
D Import Java Basics - Anfänger-Themen 2
C import von Java Klasse ohne package Java Basics - Anfänger-Themen 10
P import java.awt.*; nicht gefunden? Java Basics - Anfänger-Themen 21
X JOptionPane.showMessageDialog(); - Import Befehl? Java Basics - Anfänger-Themen 4
0 CSV Import - Zeilen, Spalten Java Basics - Anfänger-Themen 15
Bierhumpen import ? - bedeutung? Java Basics - Anfänger-Themen 5
P "import" org.apache.xxxxxxx Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben