Was passiert, wenn eine konkrete Klasse von generische Klasse erbt?

babuschka

Top Contributor
Hallo Community,
was passiert denn eigentlich wen eine konkrete Klasse von einem generischen Klasse erbt? Da ensteht dann Fehler, wenn ich mit super auf den Konstruktor der Basisklasse zugreifen will. An was kann das liegen?

Beispiel:

Java:
package generic1;

public class GenericSub extends GenericBasis {

    String adresse;
    
    GenericSub( T name, int alter, String adresse){    <--- Fehlermeldung Cannot find Class T
    super(name, alter);                                         <--- Cannot find Symbol Construktor
    this.adresse=adresse;
    }

    void drucke(){
        System.out.println("Generic Subklasse");
        System.out.println("Name: "+name);
        System.out.println("Alter: "+alter);
        System.out.println("Adresse: ");
    }
}


package generic1;

public class GenericBasis<T> {
    T name;
    int alter;
    
    GenericBasis(T n, int a){
    this.name=n;
    this.alter=a;
    }
    
    void drucke(){
        System.out.println("Generic Basisklasse");
        System.out.println("Name: "+name);
        System.out.println("Alter: "+alter);
    }

}
 

babuschka

Top Contributor
Ohne Deklaration ist Type T immer das oberste Typeobjekt Object

Java:
GenericSub( Object name, int alter, String adresse)

Also heißt es, wenn <T> bei GenericSub fehlt dann muss ich anstatt T -> Object nehmen damit die Variablen dann vom Typ T ist? Richtig oder Falsch? Stimmt es dann so? Die Variablen name und alter sind vom Typ T und gehören zur der Klasse GenericBasis. Es entsteht trotzdem Fehler, wenn ich die Klasse wie bei der ersten Beispiel deklariere.


1. Beispiel

Java:
public class GenericSub extends GenericBasis<T>  {

    String adresse;
    
    GenericSub( Object name, Object alter, String adresse){
    super(name, alter);
    this.adresse=adresse;
    }


2 Beispiel:

Java:
public class GenericSub extends GenericBasis<T>  {

    String adresse;
    
    GenericSub(T name,T alter, String adresse){
    super(name, alter);
    this.adresse=adresse;
    }
 
Zuletzt bearbeitet von einem Moderator:

Illuvatar

Top Contributor
Du kannst die Klasse entweder generisch haben, oder nicht generisch. Wenn du sie generisch machst, gibt es T, wenn nicht, dann gibt es kein T.
Dann musst du selbst entscheiden , welchen Typ T hat, das geht z.B. mit
Java:
public class GenericSub extends GenericBasis<String>
Wenn du einfach nur [c]extends GenericBasis[/c] schreibst, sollte der Compiler eigentlich warnen, und es ist gleichbedeutend mit [c]extends GenericBasis<Object>[/c].

Edit: Deine letzte Antwort hatte ich noch nicht gelesen.
Java:
public class GenericSub extends GenericBasis<T>
ist aber keine korrekte Syntax. Wenn du das generisch machen willst, musst du das auch in der Unterklasse nochmal deklarieren:
Java:
public class GenericSub<T> extends GenericBasis<T>
 
Zuletzt bearbeitet:

babuschka

Top Contributor
Du kannst die Klasse entweder generisch haben, oder nicht generisch. Wenn du sie generisch machst, gibt es T, wenn nicht, dann gibt es kein T.
Dann musst du selbst entscheiden , welchen Typ T hat, das geht z.B. mit
Java:
public class GenericSub extends GenericBasis<String>
Wenn du einfach nur [c]extends GenericBasis[/c] schreibst, sollte der Compiler eigentlich warnen, und es ist gleichbedeutend mit [c]extends GenericBasis<Object>[/c].

ja aber ich meine ja meine Klasse GenericSub ist keine generische Klasse ist eine normale Klasse erbt aber von einer generischen Klasse ist das überhaupt möglich? Oder muss die Klasse GenericSub genauso generisch sein, damit die von der GenericBasis erben kann?

Ich will einfach wissen, wie die Deklaration aussieht, wenn eine normale Klasse also nicht generische Klasse von einer generischen Klasse erbt. Und wie sieht es aus wenn eine generische Klasse von einer generischen Klasse erbt? Die Deklarationen sind für mich wichtig.
 

Illuvatar

Top Contributor
Also nochmal: Ein Objekt vom Typ GenericSub ist eben auch vom Typ GenericBasis. Und daher muss der Compiler eben wissen, was bei diesem Objekt eben "T" sein soll. Und da hast du eben die zwei Möglichkeiten: explizit angeben (extends Basis<...>) - dann ist die Unterklasse nicht mehr generisch. Oder es soll immer noch generisch sein: Sub<T> extends Basis<T>
 

babuschka

Top Contributor
Java:
public class GenericSub extends GenericBasis<T>
ist aber keine korrekte Syntax. Wenn du das generisch machen willst, musst du das auch in der Unterklasse nochmal deklarieren:
Java:
public class GenericSub<T> extends GenericBasis<T>
[/QUOTE]

ich will dass eine konkrete Klasse von einer generischen Klasse erbt. Sieht das nicht so aus?


Java:
public class GenericSub extends GenericBasis<T>


Gehört hier die erste <T> nicht zu GenericSub? Was sagt uns das?
Java:
public class GenericSub<T> extends GenericBasis<T>
 

babuschka

Top Contributor
Also nochmal: Ein Objekt vom Typ GenericSub ist eben auch vom Typ GenericBasis. Und daher muss der Compiler eben wissen, was bei diesem Objekt eben "T" sein soll. Und da hast du eben die zwei Möglichkeiten: explizit angeben (extends Basis<...>) - dann ist die Unterklasse nicht mehr generisch. Oder es soll immer noch generisch sein: Sub<T> extends Basis<T>

ne ne :D also es soll konkret bleiben. Also wenn eine Konkrete KLasse von einer generischen Klasse erbt, muss man dann anstatt <T> <Object> nehmen, damit auch die Unterklasse konkret bleibt? Andersrum wird es auch zu generischen Klasse? Ich hoffe diesmal hab ichs verstanden Sorry ???:L

uns so sieht es dann aus?

Java:
package generic1;

public class GenericSub extends GenericBasis<Object>  {

    String adresse;
    
    GenericSub( Object name, int alter, String adresse){
    super(name, alter);
    this.adresse=adresse;
    }

    void drucke(){
        System.out.println("Generic Subklasse");
        System.out.println("Name: "+name);
        System.out.println("Alter: "+alter);
        System.out.println("Adresse: ");
    }
}
 

Noctarius

Top Contributor
[c]public class GenericSub<T> extends GenericBasis<T>[/c]
In diesem Fall kannst du jeder Instanz von GenericSub einen anderen Typenparameter geben, die Klasse ist wieder generisch. Das erste <T> sagt ich habe einen Typ namens T deklariert, das zweite <T> nutzt diesen definierten Typ T.
Daher ist das zweite ohne das erste sinnlos und auch nicht möglich. Variablen kann man ja auch nicht ohne Deklaration nutzen.

[c]public class GenericSub extends GenericBasis<String>[/c]
Jede Instanz von GenericSub ist eine Instanz von GenericBasis mit dem Typenparameter String.

[c]public class GenericSub extends GenericBasis[/c]
Jede Instanz von GenericSub ist eine Instanz von GenericBasis mit dem (nicht explizit angegebenen) Typenparameter Object.
 

babuschka

Top Contributor
[c]public class GenericSub<T> extends GenericBasis<T>[/c]
In diesem Fall kannst du jeder Instanz von GenericSub einen anderen Typenparameter geben, die Klasse ist wieder generisch. Das erste <T> sagt ich habe einen Typ namens T deklariert, das zweite <T> nutzt diesen definierten Typ T.
Daher ist das zweite ohne das erste sinnlos und auch nicht möglich. Variablen kann man ja auch nicht ohne Deklaration nutzen.

[c]public class GenericSub extends GenericBasis<String>[/c]
Jede Instanz von GenericSub ist eine Instanz von GenericBasis mit dem Typenparameter String.

[c]public class GenericSub extends GenericBasis[/c]
Jede Instanz von GenericSub ist eine Instanz von GenericBasis mit dem (nicht explizit angegebenen) Typenparameter Object.

kann ich dadurch nicht sehen, dass eine generische Klasse von einer generischen Klasse erbt? Durch 2x <T> weis ich ja dass beide Klassen generisch ist oder?

Diese beipsiel

[c]public class GenericSub<T> extends GenericBasis<T>[/c]
 

Noctarius

Top Contributor
Damit könntest du beim Instanzieren wieder angeben welchen Typ GenericSub haben soll [c]new GenericSub<String>()[/c]
Lasse ich beim Instanzieren den Typ weg ist dieser wieder implizit Object.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
-horn- Was passiert, wenn Zähler über Integer Max läuft? Java Basics - Anfänger-Themen 9
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
S Operatoren i=i++; Was passiert hier? Java Basics - Anfänger-Themen 21
N Enum Typen, was passiert intern mit ihnen? Java Basics - Anfänger-Themen 2
S Unklarer Code (was passiert hier?) Java Basics - Anfänger-Themen 1
T Kann mir jemand sagen, was bei folgender for-Schleife passiert? Java Basics - Anfänger-Themen 1
V Was passiert in dem Programm? Java Basics - Anfänger-Themen 3
B Was passiert in dieser Methode? Java Basics - Anfänger-Themen 3
W Was passiert mit Objekten die nicht in Objektvariablen initialisiert werden ? Java Basics - Anfänger-Themen 3
T boolean, was passiert hier? Java Basics - Anfänger-Themen 4
G Was passiert bei einem Overflow von zwei Integer Java Basics - Anfänger-Themen 6
B Nichts passiert... Java Basics - Anfänger-Themen 4
C Klassen BubbleSort was passiert mit dem Index ? Java Basics - Anfänger-Themen 2
J Was passiert hier? Java Basics - Anfänger-Themen 6
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
F festlegen, was beim schließen des fensters passiert Java Basics - Anfänger-Themen 12
E DeSerialize von verändertem Object, was passiert? Java Basics - Anfänger-Themen 4
G Was passiert mit eine Methode bei einer Instanz Java Basics - Anfänger-Themen 13
R Deklaration: was passiert da? Java Basics - Anfänger-Themen 3
G Was passiert "at compile time" Java Basics - Anfänger-Themen 3
M 2 Fragen: Vergleich, aber wie? Was passiert in diesem Teil? Java Basics - Anfänger-Themen 18
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
G pow(double,double) was passiert bei pow(double,int) Java Basics - Anfänger-Themen 6
M Migration JUnit 3.8 -> 4.0, was passiert mit Testsuites? Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
Alex_99 Aktion ausführen wenn Frame disposed wurde Java Basics - Anfänger-Themen 5
berserkerdq2 sqllite in Java, wenn ich mache select count(*) ..., erhalte ich dann nur die gezählte Anzahl oder werden auch die Tabellen ausgegeben? Java Basics - Anfänger-Themen 2
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
E Mysql Update wenn es nicht existiert insert Java Basics - Anfänger-Themen 14
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
T Methode schreiben, die einem Array ein Stringelement hinzufügt, wenn dieses noch nicht enthalten ist. Java Basics - Anfänger-Themen 6
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
L Worauf muss ich achten, wenn ich externe Bibliotheken für meine Anwendungen verwende? Java Basics - Anfänger-Themen 6
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
D Warum nicht true wenn Array leer ist? Java Basics - Anfänger-Themen 8
R Warnung, wenn eine Variable eingegeben wird Java Basics - Anfänger-Themen 6
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
C Tabs in JTabbedPane wechseln, wenn Tabs in eigenen Klassen sind Java Basics - Anfänger-Themen 2
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
H Script ausführen wenn Browser Notification eingetroffen ist? Java Basics - Anfänger-Themen 3
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
I Shutdown wenn kein Strom verfügbar Java Basics - Anfänger-Themen 4
W Es wird erst gezeichnet, wenn ich das Fenster vergrößere? Java Basics - Anfänger-Themen 20
B FileWatcher : Erst Rückmeldung wenn komplett kopiert? Java Basics - Anfänger-Themen 3
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
Tacofan Hangman - ist der Buchstabe vorhanden wenn ja wo kommt er vor Java Basics - Anfänger-Themen 6
T Klassen In Eingabefeld von externem Programm schreiben wenn angewählt. Java Basics - Anfänger-Themen 6
F Erste Schritte Hausaufgaben-Prob. - Iterative Prog. Zahlen aufsummieren, wenn durch k>0 teilbar. Java Basics - Anfänger-Themen 5
Excess Operatoren Wenn Variable x den Wert y hat, dann mach was Java Basics - Anfänger-Themen 11
J ServerSocket: Problem, wenn Clientverbindung gekappt wird. Java Basics - Anfänger-Themen 1
S Java Counter: nur 1 mal hochzählen auch wenn Abfrage mehrmals zutrifft. Java Basics - Anfänger-Themen 1
N Variablen ändern wenn eine andere geändert wird Java Basics - Anfänger-Themen 7
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
D In Arrayfeld schreiben wenn leer Java Basics - Anfänger-Themen 8
T Klasse von erfahren wenn Obertyp Parameter ist Java Basics - Anfänger-Themen 6
T Wenn Schaltjahr ist, soll Februar, einen Tag mehr haben, GUI mit combobox Java Basics - Anfänger-Themen 4
I Zwei Listen: Wenn nicht vorhanden löschen Java Basics - Anfänger-Themen 4
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
P Aktion ausführen wenn Button geklickt wird Java Basics - Anfänger-Themen 7
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
DStrohma Operatoren Kleiner-Zeichen in Größer-Zeichen ändern wenn boolen true? Java Basics - Anfänger-Themen 6
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
S TextFieldFilter - Wenn Textfeld leer dann setze 0 Java Basics - Anfänger-Themen 9
P Ausnahme, wenn Attribut nicht definiert Java Basics - Anfänger-Themen 4
A scan.nextLine() - Wenn man zu lange nichts macht, soll etwas passieren Java Basics - Anfänger-Themen 3
Todesbote Treeset - Wenn bestimmtes Objekt vorkommt Counter erhöhen Java Basics - Anfänger-Themen 6
D jProgressBar soll bei 100% sein wenn sql Abfrage inkl. jTable schreiben fertig ist... Java Basics - Anfänger-Themen 5
W Methoden Ausgabe true wenn nur Ziffern <= 1 vorhanden Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben