누군가가 인스턴스 및 메소드 숨기기에 대한 이유 및 이점, 특히 수퍼 클래스 구성원을 복제 할 때 어떤 이점을 얻을 수 있는지 설명하십시오. 클래스를 더 정의하고 그것을 향상시키는 것이 목적의 상속에 직면하지 않습니까?인스턴스 및 메서드 숨기기 : 요점은 무엇입니까?
답변
강력하게 동의하지 않습니다. 요소는 정적 인 경우에만 숨길 수 있으므로 하위 클래스 나 인스턴스가 아닌 선언 클래스로 정적 요소를 호출하는 좋은 방법을 사용하는 경우 차이가 없습니다. 당신도 같은 이름으로 구현 된 또 다른 정적 방법, 볼 수 있듯이 Java tutorials page
public class Animal {
public static void testClassMethod() {
System.out.println("The static method in Animal");
}
public void testInstanceMethod() {
System.out.println("The instance method in Animal");
}
}
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The static 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();
}
}
윌 출력
The static method in Animal
The instance method in Cat
에서 가져온 예를 들어
, 동물에 선언 한 '년후 Cat.testClassMethod();
에 전화하지 않고 동일한 결과가 예상되는 경우가 아니라면 실제로 숨겨져 있습니다.
정적 요소가 실제로 상속되지 않으므로 하위 클래스에 바로 액세스 할 수 있기 때문에 상속 아이디어를 추상화하는 것입니다.
Java 메소드에서 상속을 통해 관련된 클래스에서 동일한 시그니처가있는 정적 메소드가 정의되면 숨김이 발생합니다. 이 아닌 경우이 인스턴스에서 발생합니다.이 인스턴스에서는 재정의가 발생합니다.
자바 언어 디자이너는 정적 메서드를 숨기거나 무시하는 두 가지 의미 중 하나를 지정해야했습니다.
나는 그들이 숨어있는 이유는 그것이 이해하고 구현하는 것이 훨씬 쉽다는 것입니다. 또한 정적 메서드의 디스패치는 컴파일 타임에 수행 할 수 있기 때문에 성능을 향상시킬 수있는 가능성이 큽니다.
숨겨진 정적 메서드가 정의 된 클래스 이름을 지정하는 한 숨겨진 메서드에도 액세스 할 수 있으므로 전반적으로 큰 문제는 아닙니다.
따라서'static' 메소드에 적용된다는 사실은 상속에 영향을 미치지 않습니다. –
이름에 대해 잊지 마세요. 같은 유형 일 필요는 없습니다. –