java代码输出结果的问题 下面这段代码输出“DemoDemo” 为什么不输出“DemoDate”?
publicclassDemoextendsDate{publicstaticvoidmain(String[]args){newDemo().yy();}publicv...
public class Demo extends Date{
public static void main(String[] args) { new Demo().yy();
}
public void yy(){
System.out.print(this.getClass().getName());
System.out.print(super.getClass().getName());
}
} 展开
public static void main(String[] args) { new Demo().yy();
}
public void yy(){
System.out.print(this.getClass().getName());
System.out.print(super.getClass().getName());
}
} 展开
展开全部
很巧 这个面试题目 我刚好看过 LZ你看过API后会发现
因为Object的getClass()方法被定义为final 所以子类不能复写这个方法,所以super.getClass().getName()等效在子类中调用this.getClass.getName()都会返回Demo
若要得到Date应该使用getClass.getSuperClass().getName()
因为Object的getClass()方法被定义为final 所以子类不能复写这个方法,所以super.getClass().getName()等效在子类中调用this.getClass.getName()都会返回Demo
若要得到Date应该使用getClass.getSuperClass().getName()
追问
弱弱地问句,super不就是代表父类吗? 为什么若要得到Date应该使用getClass.getSuperClass().getName() , 直接用super.getClass().getName();不就行了吗?
追答
super确实是代表父类 但是getClass()这个方法是Object的 而且是final的 是不能被子类复写的,API中的解释是用来返回当前Objec运行时的类。
在Demo这个类中调用getClass() 不论super.getClass()还是this.getClass都是在Demo这个类中调用的 返回的都是Demo
不知道我说清楚了没有
展开全部
由于getClass()在Object类中定义成了final,子类不能覆盖该方法。所以无论this.getClass()还是super.getClass()其实调用的是同一个方法。那么就只需要看Object中的getClass()的实现,"返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象",也就是例子中的Demo对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
getClass()是从Object继承的,不管你怎么调,都是返回当前对象的类,super关键字是调用父类的方法,不是以父类调用方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那是因为this.getClass和super.getClass得到的都是当前实例的类型,要想得到父类的类型应该这么用this.getClass().getSuperclass().getName();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Returns the runtime class of this Object.这个是getClass()的解释。按照这样来看的话,getClass()得到的是运行时的类,也就是说即使你是用super.getClass()来弄的话得到的也是运行时的类,也就是demo。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
getClass().getSuperclass().getName()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询