黑马程序员技术交流社区
标题:
super 方法调用问题
[打印本页]
作者:
余银桂
时间:
2012-6-21 23:24
标题:
super 方法调用问题
本帖最后由 余银桂 于 2012-6-22 00:10 编辑
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());
}
}
复制代码
输出结果是 Test
为什么没有获取到父类的名称?
作者:
鲍永章
时间:
2012-6-21 23:32
本帖最后由 鲍永章 于 2012-6-21 23:35 编辑
调用super.getClass()和调用this.getClass();是一样的,因为this.getClass()是从父类继承的,是Object类的方法
个人理解,这个方法是获取当前实际对象的类
你从Date继承,Date这个类里应该也没有getClass方法,总之最终是从Object继承来的,这个方法只有一个,所以是不是super都一样,结果肯定是根据实际new的对象类型决定的
作者:
朱志辉
时间:
2012-6-21 23:39
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在test方法中调用super.getClass().getName()方法等效于调用getClass().getName()方法,都是在调用从父类继承的 getClass()方法,所以super.getClass().getName()方法返回的也应该是Test。
如果想得到父类的名称,应该用如下代码:
getClass().getSuperClass().getName();
super不是超类的引用,而是表示在子类中调用父类的方法或属性而已
class B extends A {
public void print() {
System.out.println(super.getClass());//调用A类中的getclass()方法,A是Object的子类,A中的getClass()是Object中的,运行时期的实例是B类,所以输出的依然是Class B
System.out.println(this.getClass()); //调用B类中的getclass()方法,此方法从A继承的,A从Object继承的,运行时期的实例是B类,所以输出的是Class B
}
复制代码
作者:
杨康
时间:
2012-6-21 23:41
我的理解是因为Test继承了Date,而Date继承自Object,所以Test也就有了getClass方法,而在继承中的规则是子继承父后,如果有同名函数而父类中的函数将会被覆盖,则调用时会运行子类中的方法,所以super.getClass方法调用时是调用的Test类中的getClass方法。
作者:
丁二跃
时间:
2012-6-22 00:03
本帖最后由 丁二跃 于 2012-6-22 00:06 编辑
public class K extends KK{
public static void main(String[] args) {
new K().test();
}
void test(){
super.get();//super 是子类调用父类的方法,而不是通过父类去掉用,在这里通过super调用父类get方法,在父类里打印当前对象就可以一目了然,究竟是那个对象调用的。
}
}
class KK{
void get(){
System.out.println("father-----"+this);
}
}
复制代码
实验结果:father-----K@152b6651
可以看出,是k 也就是子类对象调用
作者:
张华廷
时间:
2012-6-22 00:03
在test方法中调用super.getClass().getName()方法等效于调用getClass().getName()方法,都是在调用从父类继承的 getClass()方法,所以super.getClass().getName()方法返回的也应该是Test,
作者:
余银桂
时间:
2012-6-22 00:10
朱志辉 发表于 2012-6-21 23:39
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在test方法中调用super.getClass(). ...
果然是,谢谢了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2