关于JAVA中子类用this调用同类构造器,同时调用父类构造器的问题,见下面代码

package day02;

public class Super {
int i;
String str;
public Super(){
this(1);
System.out.println("1");}
public Super(int i){

System.out.println("2");}
public Super(int i,String str){
this(1);
System.out.println("3");}
public static void main(String[] args) {
Super s = new Sub(2); }
}
class Sub extends Super{
int i;
String str;
public Sub(){
this(12,"12");
System.out.println("4"); }
public Sub(int i){
this();
System.out.println("5"); }
public Sub(int i,String str){
super(1,"1");
System.out.println("6");}
}

为什么输出的是23645呢,这里有什么JAVA语言规定吗?求高手详细解释???

第1个回答  2013-08-01
main 执行new Sub(2);
按class sub构造方法,sub(int i)是先执行this()也就是Sub();//这里先留一步,稍后回来执行sub( int i)后面的打印5
执行sub(),按构造方法是要执行 this(12,"12")也就是sub(12,"12")//这里先留一步,稍后回来执行sub()后面的打印4
执行sub(12,"12"),按构造方法是先执行继承自父类的Super(1,"1");super指继承父类,//这里先留一步,稍后回来执行sub(int i,String str)后面的打印6
执行Super(1,"1"),同样是先执行父类的this(1)即父类的Super(1),按执行,终于不再拐弯,打印出一个2,然后再执行Super(1,"1")后面的打印3
接下来就开始往回走了,之前没做完的事挨个做完,打印出6,4,5.就是绕来绕去,静下心走走就明白了,没那么难(》+《)睡觉了追问

辛苦了

java中this的用法详情介绍
this指直译是“这个”,在java中指“当前的”不管在哪里,只要用到this,指的一定就是当前的这个对象最常见的用法是在写java bean中比如下面的代码 public class Student private String name private int age;使用this调用本类中的属性\\x0d\\x0a\\x0d\\x0a现在观察以下代码,看会有那些问题\\x0d...

java中“this”的用法是什么?
使用this调用本类中的属性\\x0d\\x0a\\x0d\\x0a现在观察以下代码,看会有那些问题:\\x0d\\x0a\\x0d\\x0apublic void setName(String name){\\x0d\\x0a\\x0d\\x0aname = name ;\\x0d\\x0a\\x0d\\x0a}\\x0d\\x0a\\x0d\\x0a这里面的两个name都是setName方法中的name参数。\\x0d\\x0a...

构造器"this"的用法
此外,编译器会自动在类中加入构造器,如不显式提供,会默认添加一个无参构造器:public class Example {}编译后会增加默认构造器:Example() {} 构造器是不可继承的,但子类可以继承父类的方法,如:public class Example { public void sayHi { system.out.println("Hi"); } Example(...

java中 子类 一定要调用父类的所有构造方法吗?
不是~~但是至少应该调用一个!也可以全部调用的!任意一个类都拥有构造器的!如果你自己没有写,系统会给你加上一个默认的,没有参数的构造器,如果你自己写了,系统不会给你加上去的!因为继承就是要把父类的东西拿给自己,并在此基础上扩充自己!子类在调用构造器的时候,不知道父类拥有什么,所以...

java关于子类和父类构造方法的关系,犯迷糊!!
1、父类中没有显式定义任何构造方法,此时父类中实际有一个默认的无参数构造方法。这时,在子类中显式定义任何构造方法时,可以不用使用super调用父类的默认方法。2、父类中显式定义了默认的无参数构造方法,那么子类可以定义任意的构造方法,而不必使用super调用父类的构造方法 3、父类中显示定义了...

Java类继承时的构造函数调用问题
1、如上的运行结果,当初始化子类时会调用父类的构造方法。(第二次初始化父类普通属性即为证明)2、关于父类子类中静态属性、普通属性、静态代码块、代码块、构造方法的初始化顺序如下:父类静态块或静态属性,子类静态块或静态属性,父类普通代码块或普通属性,子类普通代码块或普通属性,父类构造器...

Java中this关键字的用法
在Java中,this关键字用于引用当前对象实例,确保代码清晰与易读性。用法如下:引用当前对象的属性:当类的属性与方法参数名相同时,使用this来区分,通过当前类实例化的对象引用访问成员变量。this关键字访问类成员不受权限限制,可访问本类所有成员变量与方法,包括private成员与方法。但访问本类static成员时...

子类实例化,调用父类构造器,会实例化父类吗
在 Java 中,无论是 explicit 还是 implicit 方式,都要求在子类的构造方法中调用其父类的构造方法。如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果 父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用...

java中,子类初始化时一定要调用父类的构造方法,不调用行吗?_百度知 ...
一定会调用,原因是这样的。因为子类继承了父类,那么就默认的含有父类的公共成员方法和公共成员变量,这些方法和变量在子类里不再重复声明。如果你初始化子类的时候,不初始化父类,那么你通过子类调用父类方法或变量的时候会出现什么情况呢?当然就是抛异常阿!所以,Java虚拟机会在你初始化子类的时候...

java 中this的用法
用this可以调用本类的属性,方法,构造方法,this(x,y,0)是用来调用public Point3D(int x, int y, int z)这个构造方法的,这个时候本类的3个属性就都有值了:x,y是外来传入的值,z的值直接就是0了!为什么要用this.x=x ,this.y=y , this.z=z,是为了区分外来的值名与本类下属性名的...

相似回答