当子类没有重写父类的方法的时候,子类的super调用的是父类方法吗?或者说当父类的非私有方法没有被子类重写,子类是拥有该方法只是没有显示出来吗?
相关代码
import java.util.Date;
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
题目来源及自己的思路
百度了这题的答案,原因是getclass方法是Object类的一个final方法,子类不能够重写,getclass方法返回的是一个当前运行类的Class对象。不能理解为什么super指向的运行时的对象是Test类
用new Test().test();调用的当然获得的就是Test这个类,super关键字只是允许你调用父类的成员或者构造函数了,其实主要就是让你可以用来调用父类的构造函数和你的父类中 那些被你在子类中覆盖了 的方法,也可以调用隐藏字段(但java不鼓励这种做法)。
对象还是Test对象没有变,你就算将对象向上转换为Date,再去使用getClass方法得到的还是Test,因为你不过是改变了指向对象的引用变量的类型而已,对象还是那个Test对象。真想知道父类可以考虑用下面的代码
在你这个代码里加上super完全是没有必要的,不加super调用的也是父类的方法,因为getClass()又没有被覆盖。PS:其实父类的方法也是继承自它的父类的最终就是你查到的Object里面的那个getClass,因为是final的所以就这样一路继承下来了。