3
Java에서 "this"는 현재 개체를 나타냅니다. 나는 "이"현재 객체와 같은 타입이라고 가정하지만,이 예를 고려해"this"키워드의 유형?
class A {
static void f() {
System.out.println("A.f");
}
void g() {
this.f();
}
}
class B extends A {
static void f() {
System.out.println("B.f");
}
}
public class C {
public static void main(String[] args) {
B test = new B();
h(test);
}
static void h(B x) {
x.g();
}
}
결과는 다음과 같습니다
A.f.
이해가 안 어느 인해 때 XG() x는 유형 B입니다. xg() 호출에서 g는 B에서 찾은 다음 A에서 찾았습니다 (B 서브 클래스 A이기 때문에). g는 A와 B의 인스턴스 메소드 인 f를 호출합니다. 즉, 호출 된 f의 버전은 암시적인 THIS 매개 변수의 유형에 따라 달라집니다. 나는 X가 B 타입이기 때문에 B.f()가 호출 될 것이라고 추측 하겠지만, 그렇지 않다.
정확히 어떤 유형입니까?
그래서 여기에 컴파일러 경고가 표시됩니다. – Thilo
나는 혼란스러워. 이 링크 http://stackoverflow.com/a/10292034/2288418에는 모든 액세스 가능한 메소드가 상속된다고 나와 있습니다. 게다가 상속되지 않았다면 컴파일 타임 오류가 발생합니다. (xg()를 호출 할 때 B에서 g를 찾으려고합니까? –
답변에서 말한 것처럼, 하위 클래스는 '정적'메소드를 선언하지 않습니다. 이 경우, 당신의 자식 클래스는 여전히 그것의 부모 클래스와 같은 타입이기 때문에, 당신은 여전히 참조 나 클래스 식별자를 통해'static' 메소드에 접근 할 수 있습니다. –