有以下代码
class Super{
public Super(){
System.out.println("Super()");
}
public Super(String str){
System.out.println("Super(String)");
}
}
class Sub extends Super{
public Sub(){
System.out.println("Sub()");
}
public Sub(int i){
this();
System.out.println("Sub(int)");
}
public Sub(String str){
super(str);
System.out.println("Sub(String)");
}
}
public class TestSuperSub{
public static void main(String args[]){
Sub s1 = new Sub();
Sub s2 = new Sub(10);
Sub s3 = new Sub("hello");
}
}
写出该程序运行的结果。
解:
package test1;
//考点:继承、this 和super 关键字
class Super {
public Super() {
System.out.println("Super()");
}
public Super(String str) {
System.out.println("Super(String)");
}
}
class Sub extends Super {
public Sub() {
System.out.println("Sub()");
}
public Sub(int i) {
this();
System.out.println("Sub(int)");
}
public Sub(String str) {
super(str);
System.out.println("Sub(String)");
}
}
public class test1 {
public static void main(String args[]) {
Sub s1 = new Sub();
//先找到13行的方法,再由于其中隐藏在最前面的super()去找父类的Super()方法即第4行代码,输出"Super()"
//执行第14行,输出"Sub()"
Sub s2 = new Sub(10);
//先找到第17行的方法,之后走到第18行代码,找到第13行的方法,又循环了一遍s1,输出"Super()",输出"Sub()"
//18行代码执行完毕后走第19行,"Sub(int)"
Sub s3 = new Sub("hello");
//找到第22行代码,走到第23行,跳到第8行,走到第9行,输出"Super(String)"
//走到第24行,输出"Sub(String)"
}
}
答案:Super()
Sub()
Super()
Sub()
Sub(int)
Super(String)
Sub(String)