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.如果是,我们不知道实现是否也调用了超类的方法。