Abstrakte Klassen

GuStaV%%

Mitglied
Hallo Leute,

ich habe hier eine Aufgabe aus meinem Skript ohne Lösung und wollte hier mal kurz fragen, ob ich es soweit richtig verstehe,

Der Code ist wie folgt;

Java:
public abstract class Klasse1 {

int j;

}

public class Unterklasse extends Klasse1{

Unterklasse(int j ) {
super.j = j;

}

abstract void do(){
}

public static void main(String[] args) {

Klasse1 b = new Klasse1() ;
Unterklasse a = new Unterklasse();

b = a;
a= b;

}


So nun soll man die ganzen Fehler in dem Code finden. Dies wäre mal soweit mein Ansatz:

Fehler 1; Klasse1 b = new Klasse1() ; -----> hier liegt ein Fehler vor, da man von abstrakten Klassen nicht instanziieren kann.

Fehler 2: super.j = j; -------> Es wird hier versucht den Superklassenkonstruktur aufzurufen, was hier so nicht möglich ist.

Fehler 3: a= b; -------> Es wird versucht ein Subtyp als Deklarationstyp einem Supertyp zuzuweisen.

Kann man hier bitte jemand sogan, ob das soweit passt und welche weiteren Fehler sich noch in dem Code eingeschlichen haben??

Vielen Dank im Voraus.
 
Zuletzt bearbeitet von einem Moderator:

White_Fox

Top Contributor
Bitte setz deinen Code in Codetags. Dann kann man das auch erträglich lesen.

Java:
public abstract class Klasse1 {
    int j;
}

public class Unterklasse extends Klasse1{
    Unterklasse(int j ) {
        super.j = j;
    }

    abstract void do(){
    }

    public static void main(String[] args) {
        Klasse1 b = new Klasse1() ;
        Unterklasse a = new Unterklasse();

        b = a;
        a= b;
    }
} // Diese Klammer scheint zu fehlen
 

White_Fox

Top Contributor
Fehler 1; Klasse1 b = new Klasse1() ; -----> hier liegt ein Fehler vor, da man von abstrakten Klassen nicht instanziieren kann.
Korrekt, das geht so nicht.

Fehler 2: super.j = j; -------> Es wird hier versucht den Superklassenkonstruktur aufzurufen, was hier so nicht möglich ist.
Falsch, es wird kein Konstruktor aufgerufen. Sondern du überschreibst die Variable j der Superklasse. In diesem Fall geht das, da j package private ist.
Allerdings ist das grottenschlechter Stil.

Fehler 3: a= b; -------> Es wird versucht ein Subtyp als Deklarationstyp einem Supertyp zuzuweisen.
Richtig, a = b geht so nicht.

Einen Fehler hast du noch übersehen. Schau dir mal die Instanzierung von Unterklasse an.


Nachtrag:
Noch eine Anmerkung zu Fehler 2: Da ich dir die Lösung nicht einfach vor die Füße werfen will, solltest du an dieser Stelle nochmal genau nachsehen. Auch wenn das, was du sagtest, nicht richtig war, so befindet sich an dieser Stelle dennoch ein Fehler.
 

GuStaV%%

Mitglied
hmm kann es sein, dass weil in der Unterklasse eine abstrakte Methode deklariert wird, diese auch als abstrakt anzusehen ist und deshalb von dieser auch nicht instanziiert werden darf?
 

White_Fox

Top Contributor
Ja, stimmt, aber das meinte ich gar nicht.

Wenn du von einer Klasse erbst, dann wird im Konstruktor der erbenden Klasse IMMER erst der Konstruktor der Superklasse aufgerufen. Wenn du es nicht explizit hinschreibst tut die JVM das trotzdem, aber eigentlich ist es guter Stil, das auch hinzuschreiben, Netbeans macht das in der Codevervollständigung automatisch.
 

GuStaV%%

Mitglied
Unterklasse a = new Unterklasse(); ---> wäre dies hier dann eigentlich auch falsch??


Wenn du von einer Klasse erbst, dann wird im Konstruktor der erbenden Klasse IMMER erst der Konstruktor der Superklasse aufgerufen. Wenn du es nicht explizit hinschreibst tut die JVM das trotzdem, aber eigentlich ist es guter Stil, das auch hinzuschreiben, Netbeans macht das in der Codevervollständigung automatisch. --------> aber wo ist dann hier der Fehler?? In der Unterklasse wird ein Konstruktor aufgerufen, bei dem man versucht, das Attribut aus der Superklasse zu initialisieren.
 

White_Fox

Top Contributor
Unterklasse a = new Unterklasse(); ---> wäre dies hier dann eigentlich auch falsch??
Die Klasse Unterklasse hat ja eine abstrakte Methode. Daher muß die Klasse auch abstrakt sein (public class Unterklasse ist demnach schon falsch, es muß abstract public class Unterklasse heißen), das hast du ja schon erkannt.
Und damit hast du schon die Antwort auf deine Frage... :)
 

mihe7

Top Contributor
Da sind wesentlich mehr Fehler enthalten, die auch noch unterschiedlich behandelt werden können. Das lässt sich leicht mit der IDE bzw. dem Compiler herausfinden:

1. Wie man bereits am Syntaxhighlighting hier im Forum erkennen kann, ist do ein Schlüsselwort, das nicht für einen Methodennamen verwendet werden darf.
2.1 Da es sich bei do um eine abstrakte Methode handelt, darf sie keine Implementierung haben. Die geschweiften Klammern müssen also auch weg.
2.1.1 Die es sich bei do um eine abstrakte Methode handelt, muss auch die Klasse abstrakt sein.
2.1.2 Wenn die Klasse abstrakt ist, kann sie in main aber auch nicht instantiiert werden.
2.2 Alternative zu 2.1: man entfernt das abstract bei der Methode do (bzw. der umbenannte Methode)
3. Unterklasse hat keinen Standardkonstruktor und kann daher nicht ohne Parameter instantiiert werden.
3.1 Man spendiert der Unterklasse einen Standardkonstruktor
3.2 Alternative zu 3.1: man verwendet den passenden Konstruktor bei der Objekterzeugung.
4. Klasse1 ist abstrakt und kann daher in main nicht instantiiert werden.
4.1 Man entfernt die Objekterzeugung von Klasse1 in main, dann bekommt man das Problem, dass a nicht deklariert ist.
4.2 Alternative: man entfernt das abstract von Klasse1.
5. Die Zuweisung eines Objekts der Superklasse zu einem Variablen, die ein Objekt der Unterklasse erwartet, ist so oder so unzulässig (a=b)

Nachtrag: zu super: das Schlüsselwort wird allgemein benötigt, um zwischen Deklarationen in der aktuellen und der Superklasse unterscheiden zu können. Da im konkreten Fall das j nicht nochmal in der Unterklasse deklariert wurde, spielt es technisch keine Rolle, ob man super.j oder this.j verwendet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
D Abstrakte Klassen Verständniss Frage Java Basics - Anfänger-Themen 4
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
B Abstrakte Klassen Java Basics - Anfänger-Themen 7
S Abstrakte Klassen Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
G Abstrakte Klassen - theoretische Frage Java Basics - Anfänger-Themen 2
OnDemand Abstrakte Klassen Java Basics - Anfänger-Themen 4
T OOP Abstrakte Klassen und ihre Kinder: wie läuft das? Java Basics - Anfänger-Themen 3
M Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
M Interface und Abstrakte Klassen Java Basics - Anfänger-Themen 12
R Namenskonvention abstrakte Klassen Java Basics - Anfänger-Themen 6
C OOP Objektstruktur: abstrakte Klassen Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
M Abstrakte Klassen Java Basics - Anfänger-Themen 21
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
T Abstrakte Klassen Java Basics - Anfänger-Themen 6
C abstrakte Klassen mögen mich nicht... Java Basics - Anfänger-Themen 2
I Abstrakte Klassen Java Basics - Anfänger-Themen 8
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
I Abstrakte Klassen Java Basics - Anfänger-Themen 22
G Abstrakte Klassen ? Java Basics - Anfänger-Themen 9
nadoria abstrakte Klassen Java Basics - Anfänger-Themen 6
M Unterscheid Abstrakte Klassen/Interface Klassen? Java Basics - Anfänger-Themen 7
T abstrakte Klassen? Java Basics - Anfänger-Themen 2
M abstrakte klassen und interfaces Java Basics - Anfänger-Themen 2
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
H abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 13
R Interfaces durch abstrakte Klassen ersetzbar? Java Basics - Anfänger-Themen 8
A Abstrakte Klassen und Interfaces Java Basics - Anfänger-Themen 11
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
K Abstrakte Klasse: vererbte Klasse; instance of? Java Basics - Anfänger-Themen 26
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
N Vererbung Abstrakte Klasse stateful Java Basics - Anfänger-Themen 3
D Methoden Abstrakte Methoden Java Basics - Anfänger-Themen 3
W Abstrakte Klasse mit Variable? Java Basics - Anfänger-Themen 2
C Abstrakte und virtuelle Methoden in Java Java Basics - Anfänger-Themen 4
E verdeckte abstrakte Methode sinnvoll? Java Basics - Anfänger-Themen 7
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
W Abstrakte und konkrete Klasse Java Basics - Anfänger-Themen 4
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
D Methoden abstrakte Methoden und Rückgabewerte Java Basics - Anfänger-Themen 2
B Abstrakte Methode vs. Interface Java Basics - Anfänger-Themen 2
propra Interface - abstrakte Klasse Java Basics - Anfänger-Themen 18
N Abstrakte Klasse Java Basics - Anfänger-Themen 28
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
V Vererbung Abstrakte Methode Java Basics - Anfänger-Themen 3
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
T Abstrakte Klasse Java Basics - Anfänger-Themen 3
S Abstrakte Klasse Java Basics - Anfänger-Themen 5
T OO, Konstruktor, abstrakte Methoden Java Basics - Anfänger-Themen 13
K Abstrakte Klasse vs. Interface Java Basics - Anfänger-Themen 21
K Abstrakte Klasse bilden? Java Basics - Anfänger-Themen 11
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
H Warum Java? | Abstrakte Klasse = Modul? Java Basics - Anfänger-Themen 20
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
G Abstrakte Klasse "Point" Java Basics - Anfänger-Themen 2
G Abstrakte Methode in gleicher Klasse aufrufen Java Basics - Anfänger-Themen 5
M abstrakte Klasse Java Basics - Anfänger-Themen 3
F Abstrakte Klasse: Konstruktor vs init() Java Basics - Anfänger-Themen 13
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
G Interface oder Abstrakte Klasse? Java Basics - Anfänger-Themen 3
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
Acha Unterschied Interface - abstrakte Klasse Java Basics - Anfänger-Themen 4
B OOP: abstrakte klasse implementiert interface Java Basics - Anfänger-Themen 3
L abstrakte Methode nicht implementiert! Java Basics - Anfänger-Themen 5
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
A Abstrakte Klasse Java Basics - Anfänger-Themen 3
G abstrakte klasse Java Basics - Anfänger-Themen 6
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
A Eine abstrakte Methode static machen? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben