重写静态内部类的静态方法时出现Stackoverflow错误

时间:2013-09-24 11:31:03

标签: java class static inner-classes

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”,因为静态方法不会覆盖。

3 个答案:

答案 0 :(得分:7)

执行的静态方法基于静态类型,而不是实例类型:

Outers.Inner1 in=new Outers.Inner2();

因此,当您调用此行时,静态类型为Outers.Inner1,因此它会调用此类的显示方法,该方法会重复调用自身(导致StackOverflowError。)

答案 1 :(得分:1)

不会以多态方式调用静态方法!

这将导致方法显示一次又一次地调用自身,直到出现Stack Overflow Error。另请参阅此问题:Polymorphism and Static Methods

答案 2 :(得分:0)

  1. 子类
  2. 无法覆盖静态方法
  3. 静态方法应该使用Class而不是对象来调用,即使你使用了object,它仍然会使用对象的类型。