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语言规定吗?
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。