2014-02-22 9 views
0

누군가가 인스턴스 및 메소드 숨기기에 대한 이유 및 이점, 특히 수퍼 클래스 구성원을 복제 할 때 어떤 이점을 얻을 수 있는지 설명하십시오. 클래스를 더 정의하고 그것을 향상시키는 것이 목적의 상속에 직면하지 않습니까?인스턴스 및 메서드 숨기기 : 요점은 무엇입니까?

+0

이름에 대해 잊지 마세요. 같은 유형 일 필요는 없습니다. –

답변

1

강력하게 동의하지 않습니다. 요소는 정적 인 경우에만 숨길 수 있으므로 하위 클래스 나 인스턴스가 아닌 선언 클래스로 정적 요소를 호출하는 좋은 방법을 사용하는 경우 차이가 없습니다. 당신도 같은 이름으로 구현 된 또 다른 정적 방법, 볼 수 있듯이 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();에 전화하지 않고 동일한 결과가 예상되는 경우가 아니라면 실제로 숨겨져 있습니다.

정적 요소가 실제로 상속되지 않으므로 하위 클래스에 바로 액세스 할 수 있기 때문에 상속 아이디어를 추상화하는 것입니다.

1

Java 메소드에서 상속을 통해 관련된 클래스에서 동일한 시그니처가있는 정적 메소드가 정의되면 숨김이 발생합니다. 이 아닌 경우이 인스턴스에서 발생합니다.이 인스턴스에서는 재정의가 발생합니다.

자바 언어 디자이너는 정적 메서드를 숨기거나 무시하는 두 가지 의미 중 하나를 지정해야했습니다.

나는 그들이 숨어있는 이유는 그것이 이해하고 구현하는 것이 훨씬 쉽다는 것입니다. 또한 정적 메서드의 디스패치는 컴파일 타임에 수행 할 수 있기 때문에 성능을 향상시킬 수있는 가능성이 큽니다.

숨겨진 정적 메서드가 정의 된 클래스 이름을 지정하는 한 숨겨진 메서드에도 액세스 할 수 있으므로 전반적으로 큰 문제는 아닙니다.

+0

따라서'static' 메소드에 적용된다는 사실은 상속에 영향을 미치지 않습니다. –