1、super与this的区别?
super是我们在子类中想使用被子类隐藏的父类的成员变量或方法时,可以使用的关键字。
this出现在类的实例方法中,代表使用该方法的当前对象。也可以出现在类的构造方法中,代表使用该构造方法所创建的对象。
this()代表当前类对象,super()代表父类对象。
表示在子类访问父类的成员和行为,必须受到类继承规则的约束。
在子类的构造函数中,如果第一行没有写super(),编译器会自动插入。但是如果父类没有不带参数的构造函数,或这个构造函数被私有化了,此时必须加入对父类的实例化构造。而this就没有这个要求,因为其本身就进行了实例化构造。
在方法中super和this的使用就差不多了,只不过super要考虑是否访问其父类的资源。
2、继承的时类的执行顺序问题:
请看源码:
A.父类
package test;
public class FatherClass{
public FatherClass(){
System.out.println("FatherClass Create");
}
}
B.子类
package test;
import test.FatherClass;
public class ChildClass extends FatherClass{
public ChildClass(){
System.out.println("ChildClass Create");
}
public static void main(String[] args){
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
请写出B中子类执行后的输出结果。
程序执行首先找的是main方法,而其第一句执行的结果是:FatherClass Create。
由于子类的构造方法中的第一行隐藏着super(),所以执行第二句时,首先还是调用父类的构造方法,所以又输出:FatherClass Create,最后才调用子类自己的构造方法,输出:ChildClass Create
所以答案为:
FatherClass Create
FatherClass Create
ChildClass Create
本文出自 “Java面试” 博客,请务必保留此出处http://funyou.blog.51cto.com/8580577/1539160
原文:http://funyou.blog.51cto.com/8580577/1539160