2013-10-19 2 views
0

내부 클래스에 외부 클래스와 같은 이름의 함수가있는 경우 오버라이드 또는 오버로드를 숨기고 있습니까?내부 클래스에 외부 클래스와 같은 이름의 함수가있는 경우 C++ 및 Java에서 재정의 또는 오버로드를 숨기고 있습니까?

나는 예 (로컬 클래스)에 대해이 같은 상황에 대해 이야기하고는 :

class A{ 
    void f(){ 
     class B{ 
      void g(){..} 
      ... 
     } 
    } 
    void g() {...} 
} 

나는이에 대한 답을 찾을 수 없습니다.

익명, 정적, 내부 및 로컬 클래스 사이의 답변에 차이가 있으면 알려주십시오.

C++의 중첩 클래스와 관련하여이 질문에 대한 답변은 무엇입니까?

+0

8 개 이상의 질문을 하나씩 넣으라고합니다. 나는이 질문들 모두가 이미 SO에 포함되어 있음을 내기를 기꺼이합니다. SO 또는 google에서 검색하거나보다 세련된 질문을 찾아보십시오. –

답변

0

참고 : 방금 두 개의 매우 다른 언어에 대해 묻는 질문에 주목했습니다. 이 대답은 C++에만 적용됩니다. 어떤 것이 자바에 적용되는지는 잘 모르겠습니다.

오버라이드 또는 오버로드가 숨겨져 있습니까? 당신이 외부 범위에 뭔가와 동일한 이름을 가진 내부 범위 내에서 뭔가를 선언하고 있습니다 :

을 숨기고있다. 외부 범위의 이름은 정규화 된 이름 A::g으로 액세스 할 수 있지만 정규화되지 않은 조회를 통해 더 이상 액세스 할 수 없습니다.

파생 클래스가 기본 클래스의 가상 함수와 동일한 이름 및 호환 매개 변수를 사용하여 함수를 선언하면이 (숨기기 외에도) 무시됩니다.

동일한 범위에서 이름이 같지만 매개 변수가 다른 두 개 이상의 함수를 선언 할 때 오버로드이 발생합니다.

익명, 정적, 내부 및 로컬 클래스 사이의 답변에 차이가 있으면 알려주십시오.

차이점이 없습니다 (C++에서는 "정적 클래스"도 없습니다). 모든 클래스는 선언 된 범위 내에서 자체 범위를 선언합니다.

C++의 중첩 클래스와 관련하여이 질문에 대한 답변은 무엇입니까?

정확히 동일합니다. 중첩 된 클래스는 외부 클래스에서 범위가 지정되며 거기에 선언 된 이름은 외부 범위의 이름을 숨 깁니다.

1

Java의 경우 답변은 이며 모든 경우에이 숨어 있습니다. 그러나 내부 컨텍스트에서 outer 메서드에 액세스 할 수있는 구문은 A.this.g()입니다.

0

내부 클래스에 외부 클래스와 같은 이름의 함수가있는 경우 오버라이드 또는 오버로드가 숨겨져 있습니까?

외부 범위에있는 중첩 범위에서 무언가를 정의하면 숨어 있습니다.

익명, 정적, 내부 및 로컬 클래스 사이의 답변에 차이가 있으면 알려주십시오.

순전히 범위 지정 규칙을 기반으로합니다. 더 간단한 예는 중첩 된 클래스가 모두 언어, 오버라이드 (override)하는 경우 외부 클래스를 확장하지 않는 한이 숨어

private final int i; 

public void method() { 
    long i = 1234; // local variable `i` hides the field. 
0

입니다. 익명/정적/지역적 차이는 없습니다.