재정의가 Java에서 숨기는 것과 어떻게 다른지 혼란 스럽습니다. 누구든지 이것이 어떻게 다른지에 대한 자세한 내용을 제공 할 수 있습니까? Java Tutorial을 읽었 지만 샘플 코드가 여전히 혼란 스러웠습니다.
더 명확하게 말하자면 재정의를 잘 이해합니다. 내 문제는 하나가 인스턴스 수준에 있고 다른 하나가 클래스 수준에 있다는 사실을 제외하고는 숨어있는 것이 얼마나 다른지 알 수 없다는 것입니다.
Java 튜토리얼 코드 살펴보기 :
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
그런 다음 하위 클래스가 있습니다 Cat.
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class method" + " in Cat.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
그런 다음 그들은 말합니다.
이 프로그램의 출력은 다음과 같습니다.
Animal의 클래스 방법.
Cat의 인스턴스 메서드.
나에게 클래스 testClassMethod()에서 직접 클래스 메서드를 호출하면 클래스에서 메서드가 Animal실행 된다는 사실 Animal은 매우 분명하며 특별한 것은 없습니다. 그런 다음 testInstanceMethod()참조에서 를 호출 myCat하므로 실행 된 메서드가의 인스턴스에있는 메서드라는 것이 다시 분명합니다 Cat.
내가보기에, 콜 숨김은 오버 라이딩과 똑같이 작동하는데, 왜 그렇게 구별합니까? 위의 클래스를 사용하여이 코드를 실행하면 :
Cat.testClassMethod();
나는 얻을 것이다 :
Cat.
그러나 testClassMethod()Cat에서 제거하면 Animal의 클래스 메서드를 얻을 수
있습니다.
이것은 부모와 동일한 서명을 가진 정적 메서드를 하위 클래스에서 거의 재정의하는 것을 보여줍니다.
내가 혼란스럽고 누군가가 빛을 발할 수있는 곳을 분명히하고 있기를 바랍니다. 미리 감사드립니다!
