问题描述
- 一个Java基础问题,求大神多指导
-
?class A {
A(int i) {
System.out.println("A");
}
}class B extends A {
B(int i) {
// super(i);
System.out.println("B");
}
}public class Test {
public static void main(String[] args) {
new B(100);
}
}
解决方案
实例化子类B会在调用B的构造方法之前会默认调用A的无参构造, 如果父类A没有无参构造,那么B的构造方法中必须强制调用super(xxxxx),否则编译失败!
解决方案二:
public class Test {
public static void main(String[] args) {
class A {
A(int i) {
System.out.println("A");
}
}
class B extends A {
B(int i) {
super(i);
System.out.println("B");
}
}
new B(100);
}
这样才正确吧
解决方案三:
一个类A中有一个带int数据类型参数的构造方法,一个类B 继承A,有一个带数据类型为int的构造方法。
创建一个对象B,输出应该是B
解决方案四:
编译错误,敲代码的时候,就提示你了。。。不用纠结
解决方案五:
要么这样,不会报错,但依然先输出A,再输出B
public class Test {
public static void main(String[] args) {
new B();
}
}
class A {
A() {
System.out.println("A");
}
}
class B extends A {
B() {
// super(i);
System.out.println("B");
}
}
解决方案六:
A有无参构造,B必须调用,可以百度下构造方法
解决方案七:
不知道你要问什么问题,哪个地方不懂。这个程序从main方法开始执行,先执行new B(100)语句,这时会调用B这个类的构造方法创建一个对象,先执行第一条语句super(i),这条语句的意思是调用B类的父类 A的构造方法,所以会输出A,之后程序继续执行B类的构造方法,输出B,所以程序的输出结果是
A
B
解决方案八:
构造方法前要加上public修饰符