2016-06-23 18 views
-1

Ich versuche, einen Superkonstruktor zu machen, aber ich bekomme immer noch den Fehler: Implizite Superkonstruktor Block() ist nicht definiert. Muss explizit einen anderen Konstruktor aufrufen. auch scheint es, dass in der Hauptklasse gibt es 2 Konstruktoren? aber ich glaube nicht, dass das den Fehler verursacht hat.Java Super() Konstruktor funktioniert nicht?

Hauptklasse:

public Block(Material blockMaterialIn, MapColor blockMapColorIn) 
{ 
    this.enableStats = true; 
    this.blockSoundType = SoundType.STONE; 
    this.blockParticleGravity = 1.0F; 
    this.slipperiness = 0.6F; 
    this.blockMaterial = blockMaterialIn; 
    this.blockMapColor = blockMapColorIn; 
    this.blockState = this.createBlockState(); 
    this.setDefaultState(this.blockState.getBaseState()); 
    this.fullBlock = this.getDefaultState().isOpaqueCube(); 
    this.lightOpacity = this.fullBlock ? 255 : 0; 
    this.translucent = !blockMaterialIn.blocksLight(); 
} 

public Block(Material materialIn) 
{ 
    this(materialIn, materialIn.getMaterialMapColor()); 
} 

Unterklasse:

public class ItemVoidiom_Ore extends Block { 

public ItemVoidiom_Ore(Material materialIn) { 
    super(materialIn); 
} 

public ItemVoidiom_Ore() /** the error is here, Implicit super constructor Block() is undefined. Must explicitly invoke another constructor. */ 
{ setUnlocalizedName(Reference.enumstuff.VOIDIOM_ORE.getUnlocalizedName()); 
    setRegistryName(Reference.enumstuff.VOIDIOM_ORE.getRegistryName()); 
} 

} Vielen Dank für jede Hilfe!

Edit: Ich habe das Objekt hier definiert, in einer anderen Klasse

public static Block voidiom_ore; 

public static void init() 
{ 
    voidiom_ore = new ItemVoidiom_Ore(); 
} 

Edit: regelte es, vielen Dank für die Hilfe!

+2

'ItemVoidiom_Ore()' 'versucht, Sperren()' aufzurufen, die nicht existiert. Sie müssen angeben, welcher Superklassenkonstruktor explizit ausgeführt werden soll. – Eran

+2

'ItemVoidiom_Ore()' beginnt implizit mit 'super()', was bedeutet, dass versucht wird, einen Konstruktor zu verwenden, der 'Block()' entspricht. – khelwood

+0

Ich verstehe Eran nicht ganz .. – itay51998

Antwort

2

Der Fehler ist, dass es keinen Konstruktor Block() gibt. Entweder definieren einen Konstruktor Block() mit no-args oder explizit nennen Block(Material blockMaterialIn, MapColor blockMapColorIn) oder Block(Material materialIn) von ItemVoidiom_Ore()

0

Das Problem ist, dass der zweite Konstruktor public ItemVoidiom_Ore() ist nicht der Oberklasse des Konstrukteurs aufruft.

Sie müssen explizit einen der beiden Superklassenkonstruktoren aufrufen (wie in der ersten).

0

Ein Standardkonstruktor ist ein Konstruktor ohne Parameter.


Wenn kein expliziter Aufruf super (den Konstruktor der Superklasse) erfolgt ein Aufruf des Standard-Konstruktor der Superklasse erfolgt.

In Ihrem zweiten Konstruktor Sie haben keinen expliziten Aufruf von super-Konstruktor, müssen Sie den Code, um etwas ändern explizit den Konstruktor der Superklasse aufrufen:

public ItemVoidiom_Ore() { 
    // Here you need to call super(Material blockMaterialIn, MapColor blockMapColorIn); 
    // or super(Material materialIn) 
    setUnlocalizedName(Reference.enumstuff.VOIDIOM_ORE.getUnlocalizedName()); 
    setRegistryName(Reference.enumstuff.VOIDIOM_ORE.getRegistryName()); 
} 

Sie müssen die eine der bestehenden Konstrukteure explizit nennen der Superklasse.


Eine weitere Alternative besteht darin, der Superklasse Block einen Standardkonstruktor hinzuzufügen.

0

In Java MUSS jeder Konstruktor einen Konstruktor der Superklasse aufrufen, bis hin zu java.lang.Object. Wenn Sie keinen super(...) Aufruf selbst hinzufügen, wird dies für Sie automatisch am Anfang Ihres Konstruktors hinzugefügt.

In Ihrem Fall enthält der ItemVoidiom_Ore-Konstruktor keine super(...), also verhält sich der Code so, als hätten Sie am Anfang super() geschrieben. Die Klasse Block enthält jedoch keinen Konstruktor ohne Argumente.

Um das Problem zu lösen, können Sie Block einen Standardkonstruktor hinzufügen oder einen super(...) Aufruf hinzufügen, der Argumente für eine der zwei Konstruktorvarianten in Block bereitstellt.

0

Das Problem ist hier:

public ItemVoidiom_Ore() { setUnlocalizedName(Reference.enumstuff.VOIDIOM_ORE.getUnlocalizedName()); 
    setRegistryName(Reference.enumstuff.VOIDIOM_ORE.getRegistryName()); 
} 

Da Sie nicht erwähnt, welcher Konstruktor Block (die Super) Java zu verwenden versucht, das Standard-Konstruktor zu verwenden, aber es existiert nicht so funktioniert Java nicht wissen, welcher Konstruktor verwendet werden soll, um Block zu erstellen. Entweder fügen Sie einen Standardkonstruktor zu Block hinzu oder rufen Sie einen seiner 2 Konstruktoren auf

0

Ein Klassenkonstruktor muss immer, als seine erste Aktion, einen Konstruktor seiner Superklasse aufrufen.

Für Ihren ersten ItemVoidiom_Ore Konstruktor wird dies ausdrücklich getan:

public ItemVoidiom_Ore(Material materialIn) { 
    super(materialIn); // calls Block(Material) constructor 
} 

Für Ihren anderen ItemVoidiom_Ore Konstruktor wird es nicht explizit gemacht, so dass es an den (nicht vorhandenen) Standardkonstruktor einen impliziter Aufruf von Block.

Sie müssen entweder einen expliziten Aufruf zu einem bestehenden Block Konstruktor (wie in den anderen ItemVoidiom_Ore Konstruktor), oder fügen Sie einen entsprechenden Standard (keine Parameter) Konstruktor Block hinzuzufügen.

0

Bitte definieren Sie einen Konstruktor ohne Argumente für Block.

public-Block() {}

Verwandte Themen