public class StaticInnerClass {
public static void main(String[] args) {
//Outers out=new Outers();
Outers.Inner1 in=new Outers.Inner2();
in.display();
}
}
class Outers
{
static class Inner1
{
static void display()
{
display();
System.out.println("Inner1");
}
}
static class Inner2 extends Inner1
{
static void display()
{
System.out.println("Inner2");
}
}
}
上述程序给出了stackoverflow错误。请解释为什么它不显示“Inner1”,因为静态方法不会覆盖。
答案 0 :(得分:7)
执行的静态方法基于静态类型,而不是实例类型:
Outers.Inner1 in=new Outers.Inner2();
因此,当您调用此行时,静态类型为Outers.Inner1
,因此它会调用此类的显示方法,该方法会重复调用自身(导致StackOverflowError
。)
答案 1 :(得分:1)
不会以多态方式调用静态方法!
这将导致方法显示一次又一次地调用自身,直到出现Stack Overflow Error。另请参阅此问题:Polymorphism and Static Methods
答案 2 :(得分:0)