java中的初等继承

java中的初等继承,java,inheritance,Java,Inheritance,所以我有一个超类和两个扩展超类的类ClassA和ClassB。 ClassA和Superclass包含方法。doSomething(),ClassB不包含方法。 我在a列表对象中得到了ClassA和-B的实例。还有一个循环,它遍历对象并调用.doSomething(),如下所示: for(Superclass o : objects){ o.doSomething(); } 我的问题是:如果o是一个实例,如果ClassA,则调用ClassA.doSomething(),或者这个循环只调

所以我有一个
超类
和两个扩展
超类
的类
ClassA
ClassB
ClassA
Superclass
包含方法
。doSomething()
ClassB
不包含方法。 我在a
列表对象中得到了ClassA和-B的实例。还有一个循环,它遍历
对象
并调用
.doSomething()
,如下所示:

for(Superclass o : objects){
    o.doSomething();
}

我的问题是:如果
o
是一个实例,如果
ClassA
,则调用
ClassA.doSomething()
,或者这个循环只调用
超类.doSomething()

是,因为
ClassA
方法重写了
超类的方法,因为超类实现了doSomething,所以ClassB继承该实现,ClassA覆盖它。

如果实例是
ClassA
的,则将调用其方法,并且只有
ClassA
没有实现时才会考虑超类方法

  class Super
{
 void hi()
 {
 System.out.println("Super class");
 }
}
class A extends Super
{
 void hi()
 {
  System.out.println("Class A");
 }

}
class B extends Super
{


}
public class Drive
{

public static void main(String[]args)
{
 Super s=new A(); 
 s.hi();                // prints "Class A"
 Super h=new B();
 h.hi();             // prints "Super Class" since B does not override Super
}
}                        //hope this helps

如果将
ClassA
实例分配给超类类型的变量,这一点不会改变。在其他语言中,这可能会有所不同,但在Java中总是这样。

如果只是有可能尝试一下的话。提示:
ClassA.doSomething()
被调用。重写的版本将始终是使用的版本,因此是的,它将是
ClassA.doSomething()?你在想什么?@Marvin 1。我们不知道
doSomething()
是否在
ClassA
中被重写。2.如果是,我们不知道实现是否也调用了超类的方法。