재정의가 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의 클래스 메서드를 얻을 수
있습니다.
이것은 부모와 동일한 서명을 가진 정적 메서드를 하위 클래스에서 거의 재정의하는 것을 보여줍니다.
내가 혼란스럽고 누군가가 빛을 발할 수있는 곳을 분명히하고 있기를 바랍니다. 미리 감사드립니다!