第一个程序:class A extends B{
public A(){
super(1,2);
System.out.println("bbb");
}
public static void main(String args[]){
A a=new A();
}
}
class B{
public B(){
System.out.println("B");
}
public B(int x,int y){
System.out.println("aaa");
}
}输出结果是:aaa
bbb
第二个程序:class A extends B{
public A(){
//super(1,2);
System.out.println("bbb");
}
public static void main(String args[]){
A a=new A();
}
}
class B{
public B(){
System.out.println("B");
}
//public B(int x,int y){
//System.out.println("aaa");
//}
}输出结果是:
B
bbb代码写的不好,只是有点不懂!
1.在main方法中调用子类的构造方法,应该先调用父类的构造方法,所以在第一个程序,应该先调用父类的方法,第一个输出的是B,但是,却输出了aaa
2.在第二个程序中,第一个输出的是B(先调用父类的构造方法)
请高手讲解一下!谢谢!
public A(){
super(1,2);
System.out.println("bbb");
}
public static void main(String args[]){
A a=new A();
}
}
class B{
public B(){
System.out.println("B");
}
public B(int x,int y){
System.out.println("aaa");
}
}输出结果是:aaa
bbb
第二个程序:class A extends B{
public A(){
//super(1,2);
System.out.println("bbb");
}
public static void main(String args[]){
A a=new A();
}
}
class B{
public B(){
System.out.println("B");
}
//public B(int x,int y){
//System.out.println("aaa");
//}
}输出结果是:
B
bbb代码写的不好,只是有点不懂!
1.在main方法中调用子类的构造方法,应该先调用父类的构造方法,所以在第一个程序,应该先调用父类的方法,第一个输出的是B,但是,却输出了aaa
2.在第二个程序中,第一个输出的是B(先调用父类的构造方法)
请高手讲解一下!谢谢!
public B(int x,int y){
System.out.println("aaa");
}
这个构造函数
应该先调用 无参构造方法.但是结果调用的 有参数的构造方法.
是不是因为先调用了A本身的构造方法,才去调用父类有参的构造方法呢?确实是这样,A a=new A();以后,虚拟机会首先去检查A的构造方法中,有没有super关键字
如果没有再去调用父类构造方法,如果有就先执行super里面的内容
这也是为什么super一定要写在first的原因
我在给大家一个public class Base {
public int i =1;
public void amethods(){
System.out.println("Base.amethod()");
}
Base(){
amethods();
}}public class Descend extends Base{
public int i=-1;
int d=0;
public static void main(String[] args) {
Base b = new Descend();
System.out.println(b.i);
b.amethods();
}
public void amethods(){
System.out.println("Descend.amenthod()");
}}
大家可以运行一下 答案是
Descend.amenthod()
1
Descend.amenthod()
第二个程序:因为你继承了父类,在调用子类构造方法之前,先会隐示的调用父类没有参数的构造方法,然后再调用子类的构造方法