2017-08-14 60 views
0

里面的父对象我有两个类: -错误而创建子类

import java.lang.*; 
class A { 
    public A(int number) { 
     System.out.println("HI I AM INSIDE PARENT CONSTRUCTOR"); 
    } 
} 
class B extends A { 
    public static void main(String[] args) { 
     A obj = new A(10); 
    } 
} 

错误: - 隐超构造函数A()是未定义默认构造函数。必须定义一个显式的构造函数。

+0

寻求帮助时,请采取格式化,合理和可读性很强缩进代码的时间。 (这是一个好主意时,不寻求帮助,太)*(我已经做到了你这一次。)* –

+3

注意,有没有点'进口的java.lang。*;'这是默认导入。 –

+0

通常像Eclipse或其它的IDE,给你一个关于那种错误的提示,如果你将鼠标移动到的编译错误 – Jesus

回答

2

的问题是,你有没有在B声明的构造,所以编译器提供的默认构造函数,这实际上是这样的:

B() { 
    super(); 
} 

由于A没有构造函数接受零个参数,B能不会被编译。您需要向B添加一个构造函数,该构造函数调用super(int),或者您需要向A添加一个零参数构造函数。

+0

能否请您解释为什么它在调用B的constructor.While创建父类对象的。 –

+0

@shankarDayalupadhyay:不是。你没有那么远。该代码不*编译*。编译前您无法运行代码。如果你添加一个'B'构造函数来获取调用'super(int)'的'int',代码将会被编译。当你运行它,因为你从来没有创建'B',该构造函数将永远不会被运行一个实例(只是'A'构造函数)。 –

0

您已经给出了具有int参数的A的自己的构造函数。现在你需要自己添加一个构造函数给B类。

public B(int number) { 
    super(number); 
} 
2

原理

子类构造函数调用父类的构造。

默认情况下,编译器会生成一个no arg构造函数,如果您不声明它的话。
重要细节:此生成的构造函数使用无参数调用调用父构造函数。


你的情况下

你不B.声明构造
从而产生B的无参数的构造函数默认:

此构造是:

B(){ 
    super(); 
} 

但它不能调用父构造函数,因为它声明了一个参数:

public A(int number) 

所以编译器生成此错误:

Implicit super constructor A() is undefined for default constructor. Must define an explicit constructor.

解决您的问题,在调用明确与预期参数的父类的构造子类声明构造:

public B(int number) { 
    super(number); 
} 
0

我认为你在A课中缺少default constructor。 查看this answer作进一步解释。

0

添加构造函数B(INT):

import java.lang.*; 

class A { 
    public A(int number) { 
     System.out.println("HI I AM INSIDE PARENT CONSTRUCTOR"); 
    } 
} 

class B extends A { 
    public B(int number) { 
     super(number); 
    } 

    public static void main(String[] args) { 
     A obj = new A(10); 
    } 
} 

地址:

public B(int number) { 
    super(number); 
} 
0

当你没有定义Java中的构造函数,你会得到一个隐含的默认构造函数。当你定义一个构造函数时,那么默认的构造函数就不存在了。所以,当你有这样的:

Class A { 

} 

这相当于:

Class A { 
    A() { 
     super(); 
    } 
} 

在你的情况下,B类是调用默认的构造函数,但因为已经定义的另一个构造函数中,那么默认的构造函数就不存在了,除非你明确地定义它。

0

因为您已经在父类中定义了一个带参数的构造函数,所以编译器不会调用没有参数的默认构造函数。为了在子类初始化之前实例父类,您必须在子类中调用父类的显式构造函数。