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

4

3 回答 3

7

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

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

因此,当您调用此行时,静态类型是Outers.Inner1,因此它调用作为此类的一部分的 display 方法,该方法重复调用自身(导致StackOverflowError.)

于 2013-09-24T11:32:15.420 回答
1

静态方法不会被多态调用!

这将导致方法显示一次又一次地调用自身,直到您收到堆栈溢出错误。另外,请参阅这个问题:多态性和静态方法

于 2013-09-24T11:36:23.353 回答
0
  1. 静态方法不能被子类覆盖
  2. 静态方法应该用类而不是对象调用,即使你使用对象,它仍然会使用对象的类型。
于 2013-09-24T11:54:52.203 回答