2017-09-24 68 views
-3

我有两个类父类和子类中,父类方法是从子类对象调用

class SuperClass{ public void count(){} } 
class SubClass extends SuperClass { } 
class Test 
{ 
    public static void main(String[] args) 
    { 
     new SubClass().count(); 
    } 
} 

在这里,我用加多宝看到这个代码是如何工作的,让子类的对象后,我预计的计数方法该子类被称为继承SuperClass的count方法,但SuperClass的count方法被调用。

我在jdb中使用“list”进行了检查,它显示了SuperClass的count方法中的行,为什么会发生这种情况?

+3

因为'SubClass'中没有'count'方法来调用。用oops术语,你没有重写'SubClass'中的'count'方法。 – kaza

+2

您没有重写任何内容... –

+3

这不是Java。或者如果是的话;它不会编译。 –

回答

2

当您调用对象的方法时,Java会检查该对象中是否存在该方法。如果是这样,它会调用它,否则会检查父类中的存在。等到找到方法为止。 由于您没有重写您的方法,因此调用的方法是父方法。

-1

它应该是下面的东西。

 class SuperClass{ public void count(){ 
    //if it is not overriden in the child class then this will get executed 
    } 
} 
     class SubClass extends SuperClass { 
     public void count(){ 
     //If this exists, this will be executed otherwise the parent count() will be executed 
     } 
     } 
     class Test 
     { 
      public static void main(String[] args) 
      { 
       new SubClass().count(); 
      } 
     } 
+0

*为什么*应该是这样的东西? – Makoto

+0

@Makoto我正在读他的陈述“我期望SubClass的count方法被称为继承SuperClass的count方法,但SuperClass的count方法被调用。”但他没有提供实施。每个方法的评论部分还有他的信息。 –