2013-09-24 2 views
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"); 
    } 
} 
} 

위의 프로그램에서 스택 오버 플로우 오류가 발생합니다. 정적 메서드가 재정의하지 않기 때문에 "Inner1"이 표시되지 않는 이유를 설명하십시오. 실행정적 내부 클래스의 정적 메서드를 재정의하는 데 Stackoverflow 오류가 발생했습니다.

+0

당신은 재귀 적으로'display()'를 호출하고 있습니다. –

답변

7

정적 방법은 정적 유형을 기반으로하지 인스턴스 유형 : 그래서

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

이 선을 호출 정적 유형은 Outers.Inner1이므로 그건 표시 방법을 호출 반복적으로 자신을 호출하는이 클래스의 일부분 (StackOverflowError을 발생 시킴)

+1

"정적 유형"은 정적 메서드가 아닌 객체의 런타임 유형이 아닌 컴파일러에서 볼 수있는 변수의 유형을 의미합니다. –

1

정적 메서드는 다형 적으로 호출되지 않습니다.

이렇게하면 스택 오버플로 오류가 발생할 때까지 메소드 표시가 반복적으로 호출됩니다. Polymorphism and Static Methods

0
  1. 정적 방법은
  2. 정적 방법은 당신이 개체를 사용하더라도이 아닌 객체와 클래스로 호출 할 필요가 하위 클래스에 의해 재정의 할 수 없습니다, 그것은 여전히 ​​사용할 예정 : 또한,이 질문을 참조 객체의 형태
+0

실제로는 '재정의 (override)'(동일한 서명으로 메소드 정의) 할 수 있지만 기본 클래스의 메소드가 호출됩니다. –

관련 문제