동적 메서드가 Java에서 호출되는 것을 감안하여 Java에서 수퍼 클래스 메서드 대신 하위 클래스 메서드를 호출 할 수없는 이유를 이해할 수 없습니다.Java에서 동적 메서드 조회
예 : 두 클래스가있는 경우 Test
및 Test2
입니다. TEST2 클래스 테스트
방법 someFunction()
는 하위 클래스에서 재정의에서 상속
테스트 클래스
public class Test {
public Test(){
System.out.println("I am Test class constructor called with no values");
}
public void someFunction(){
System.out.println("I am some function belonging to Test Class");
}
}
그리고 TEST2 클래스 : 그래서
public class Test2 extends Test{
public Test2(){
System.out.println("Constructor of Test2 with no values");
}
public void somFunction(){
System.out.println("I am someFunction overridden in Test2");
}
}
하려고하다 이 방법으로 테스트 클래스를 인스턴스화 :
Test t1 = new Test2();
t1.someFunction(); // this should call Test2.someFunction()
내가 얻을 출력은 다음과 같습니다
이I am Test class constructor called with no values
Constructor of Test2 with no values
I am some function belonging to Test Class
그래서 제 질문은 다음과 같습니다 나는 왜에 속하는 메소드를 호출 않습니다 object t1
를 사용하는 방법 someFunction()
를 호출 할 때 서브 클래스로 객체를 초기화 할 때조차도 서브 클래스에있는 슈퍼 클래스 대신.
나는 동적 호출이 이런 식으로 작업하는 것으로 생각했다. 객체를 초기화하는 클래스가 호출된다. 즉, 그 클래스의 메소드가 호출된다. 즉, 부모 메소드 대신에 기본적으로 오버라이드 된 메소드가 호출되어야한다.
dinesh
이런 종류의 오류를 방지하려면 @Override 주석을 사용하십시오. – leonbloy