关于父类和子类同名static方法的调用
publicclassTest{publicstaticvoidmain(String[]args){Fatherfather=newFather();Fatherchi...
public class Test{
public static void main(String[] args) {
Father father =new Father();
Father child = new Child();
System.out.println(father.getName());
System.out.println(child.getName());
}
}
class Father{
public static String getName(){
return "Father";
}
}
class Child extends Father{
public static String getName() {
return "Child";
}
}
求解释为什么child.getName()调用的是父类的getName() 展开
public static void main(String[] args) {
Father father =new Father();
Father child = new Child();
System.out.println(father.getName());
System.out.println(child.getName());
}
}
class Father{
public static String getName(){
return "Father";
}
}
class Child extends Father{
public static String getName() {
return "Child";
}
}
求解释为什么child.getName()调用的是父类的getName() 展开
3个回答
展开全部
书上写的是 :“如果子类重写了父类的静态方法,那么子类对象的上转型对象不能调用子类的静态方法,只能调用父类的静态方法。(Java2实用教程(第四版) 耿祥义 张跃平编著 第128页的注:)
http://blog.csdn.net/xiangwanpeng/article/details/52504274?locationNum=12&fps=1
这是我看到的一篇关于static方法能否被重写的博文,博主结论是:Java中,如果父类中含有一个静态方法,且在子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。换句话说,父类和子类中含有的其实是两个没有关系的方法,它们的行为也并不具有多态性。正如同《Java编程思想》中所说:“一旦你了解了多态机制,可能就会认为所有事物都可以多态地发生。然而,只有普通方法的调用可以是多态的。”这也很好地理解了,为什么在Java中,static方法和final方法(private方法属于final方法)是前期绑定,而其他所有的方法都是后期绑定了。
http://blog.csdn.net/xiangwanpeng/article/details/52504274?locationNum=12&fps=1
这是我看到的一篇关于static方法能否被重写的博文,博主结论是:Java中,如果父类中含有一个静态方法,且在子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。换句话说,父类和子类中含有的其实是两个没有关系的方法,它们的行为也并不具有多态性。正如同《Java编程思想》中所说:“一旦你了解了多态机制,可能就会认为所有事物都可以多态地发生。然而,只有普通方法的调用可以是多态的。”这也很好地理解了,为什么在Java中,static方法和final方法(private方法属于final方法)是前期绑定,而其他所有的方法都是后期绑定了。
展开全部
class Father{
public static String getName(){
return "Father";
}
}
因为你把父类方法修饰成了static 子类不能重写父类的这个方法!去掉static就是你想要的结果了
public static String getName(){
return "Father";
}
}
因为你把父类方法修饰成了static 子类不能重写父类的这个方法!去掉static就是你想要的结果了
追问
这个我懂.
我不懂的是,生成child对象的时候,也同时生成了一父类的对象,子类对象调用方法的时候不是首先检查子类是否有这方法的吗?static方法不能重写,但是子类也申明了这个方法,那么父类的getName方法和子类的getName方法存在于不同的内存空间,就是说子类的getName方法也是存在的,为什么却调用的是父类的getName方法?
追答
Father father =new Father();
Father child = new Child();
看看你创建对象的时候 你用父类的引用去创建了子类的事例
这样调用的还是父类的引用
你如果把第二行改成
Child child = new Child();
调用的就是子类自己的方法了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说白了就是每个类的静态方法只有一份拷贝,和对象无关,这样就好理解了。
可以了解一下前期绑定和动态绑定的概念
可以了解一下前期绑定和动态绑定的概念
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询