所以我有一个Superclass
和两个ClassA
和ClassB
类扩展Superclass
。
ClassA
和Superclass
包含方法.doSomething()
,ClassB
则不包含。
我在List<Superclass> objects
中获得了ClassA和-B的实例。还有一个循环遍历objects
并调用.doSomething()
,如下所示:
for(Superclass o : objects){
o.doSomething();
}
我的问题是:如果o
是ClassA
的实例,那么是ClassA.doSomething()
被调用还是此循环只调用Superclass.doSomething()
?
答案 0 :(得分:1)
是的,因为SuperClass实现了doSomething,ClassB继承了该实现,ClassA会覆盖它。
答案 1 :(得分:0)
是的,因为.doSomething()
的方法ClassA
会覆盖Superclass
的方法。
答案 2 :(得分:0)
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
答案 3 :(得分:0)
如果某个实例属于ClassA
,则会调用其方法,并且只有在ClassA
没有实现的情况下才会使用超类方法。
如果将ClassA
实例分配给超类类型的变量,则不会发生这种情况。在其他语言中,可能会有所不同,但对于Java,它总是那样。