Vererbungsproblem --> Implicit super constructor

Status
Nicht offen für weitere Antworten.

volk

Mitglied
:?:

Hallo zusammen,

ich habe folgendes Problem:

Es gibt eine fremde Klasse, die ich nicht ändern darf!

Ich muss von dieser Klasse ableiten.

Beispiel:

Code:
class Base
{
	Base(Object source, int index)
	{
	
	}
}

Code:
class MyClass extends Base
{
	public MyClass(Object source, int index)
	{
	   super(source, index);
	}
	
	public MyClass()  ---> Hier ist das Problem! Ich benötige auch einen Standardkonstruktor, aber es geht leider nicht!
	{
	}
	
}
Es gibt eine andere Klasse, die meine Klasse "MyClass" über Reflection instanziiert. Beim erzeugen der Instanze
über Reflection gibt folgende Exception: java.lang.InstantiationException.

Code:
           Class c = Class.forName("MyClass");
            Object o = c.newInstance(); ---> hier knalt! Weil die Klasse MyClass keinen Standardkonstruktor hat
Frage 1: Wie kann man in der Klasse MyClass zusätzlich einen Standardkonstruktor definieren?

Frage 2: Gibt eine andere alternative zu c.newInstance() ? Was macht man, wenn die Klasse keinen Standardkonstruktor hat?


Danke :)
 

LordSam

Mitglied
Zunächst mal muss die Superklasse von der Du ableitest korrekt instanziert werden. Du kannst aber den Super-Constructor mit 'default' argumenten aufrufen, z.b:
Code:
 ...
public MyClass() {
  super(null, 123);
}

Das Instanzieren einer Klasse mit definiertem Constructor per reflection funktioniert so:
Code:
  Class clazz = Class.forName(className);
  Constructor cstr = clazz.getConstructor(new Class[] { Object.class, int.class } );
  MyClass myClass = (MyClass)cstr.newInstance(new Object[] { object_arg1, new Integer(0) });

Du musst Dir also zuerst den richtigen Constructor holen bevor Du ihn dann instanzieren kannst. Natürlich mit den richtigen 'Argumenten'.
 

Mag1c

Top Contributor
Hi,

einen Standardkonstruktor kannst du hinzufügen, wenn das inhaltlich möglich ist. Normalerweise werden ja Standardkonstruktoren genau dann weggelassen, wenn zwingen Parameter übergeben werden müssen. Wenn died hier nicht der Fall ist bzw. wenn du geeignete Default-Werte setzen kannst, kannst du auch einen Std-Konstruktor einfügen.

Wenn es einzig darum geht, die Klasse über Reflection instanziieren zu können, geht das auch anders:

Code:
String parm1 = "xxx";
int parm2 = 1;
Constructor c = MyClass.class.getConstructor(new Class[] {Object.class, Integer.TYPE});
Object o = c.newInstance(new Object[] {parm1, new Integer(parm2)});

Gruß
Mag1c
 

volk

Mitglied
Hi!

Es gibt keine newInstance - Methode mit dem Parameter!

Ich bekomme folgende Fehlermeldung:

The method newInstance() in the type Class is not applicable for the arguments (Object[])
 

volk

Mitglied
Sorry, mein Fehler! Ich habe falsches Objekt benutzt und nicht das richtige Objekt von der Klasse Constructor!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Vererbungsproblem Allgemeine Java-Themen 2
H2SO3- Vererbung vererbungsproblem Allgemeine Java-Themen 8
B Konstruktor - Vererbungsproblem Allgemeine Java-Themen 2
L Super User via Processbuilder (Linux) Allgemeine Java-Themen 3
J Überschriebene Funktion soll nicht die super Funktion aufrufen Allgemeine Java-Themen 4
perlenfischer1984 Mit Lombok Builder Felder in Super Klasse füllen Allgemeine Java-Themen 12
Hacer List<? super E> Allgemeine Java-Themen 10
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
G super- Methode aufrufen Allgemeine Java-Themen 21
trash super + JTable Allgemeine Java-Themen 7
trash super() mit Variable bestücken Allgemeine Java-Themen 3
G Super- und Subclass Allgemeine Java-Themen 2
S Stellung von super() Allgemeine Java-Themen 4
G super.super Allgemeine Java-Themen 7
conan2 super-super-Konstruktor? Allgemeine Java-Themen 3
P mehrere super klassen Allgemeine Java-Themen 10
thE_29 Foxtrot doch nicht so super. Allgemeine Java-Themen 12
D super-Konstruktor ist nicht super ;) Allgemeine Java-Themen 6
H Super-Konstruktor Allgemeine Java-Themen 7
thE_29 PrintStream und super.println() Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben