Clo*_*loo -6 java inheritance constructor
在以下示例中:
class A {
private int a;
private int b;
private int c;
public A(int a, int b , int c) {
this.a = a;
this.b = b;
this.c = c;
}
}
class B extends A {
public B() {
super(1,2,3);
}
Run Code Online (Sandbox Code Playgroud)
super(1,2,3)在class B创建私有领域一样,在A类的私有字段?或者使用此语句是否违法,因为B不能继承A的私有字段?你不能这样打电话super():
class B extends A {
super(1,2,3);
}
Run Code Online (Sandbox Code Playgroud)
super()OR this()应该是构造函数中的第一个语句.首先纠正你的这个基本错误,然后再继续.super()默认情况下使用,即使您没有明确使用它.
class B extends A {
B (){
super(1,2,3);
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法.在发布问题之前,请先阅读有关构造函数和Java语言基础知识的内容.
编辑
我没有注意到有人编辑了你的问题要添加super(1,2,3)到构造函数中,现在回答你的问题如下:
B类中的语句super(1,2,3)是否创建了与A类中的私有字段相同的私有字段?或者使用此语句是否违法,因为B不能继承A的私有字段?
不,通过调用super(1,2,3)你正在做的就是将3个整数值传递给基类构造函数public A(int a, int b , int c)之后你将这些值分配给基类的私有实例变量,你不是为类B创建一个单独的字段,如果那样的话你问的是什么,并且没有B类仍然无法直接访问基类实例变量(通过直接声明我的意思是继承或制作实例,还有其他方法,如setter/getters等)
我们假设我们没有在类B中使用超级构造函数,那么通常计算机将调用类A的默认构造函数.我们知道私有字段不是在Java中继承的,那么默认构造函数在这种状态下初始化的是什么?
不,如果您不在B类中使用构造函数super(int, int, int)来匹配基类构造函数的参数,(int a, int b , int c)那么您的代码甚至不会编译.默认构造函数将调用Base类的no-args构造函数,但由于Base类没有默认构造函数,因此您将收到编译错误!