2014-04-14 6 views
-1

개인 메서드를 재정의 할 수 없으면 followng 코드가 오류를 나타내지 않는 이유는 무엇입니까? 대신 출력을 생성합니다.개인 메서드 재정의

class A { 
    private void fun() { 
     System.out.println("ths is a private method"); 
    } 
} 

class B extends A { 
    void fun() { 
     System.out.println("ths is wrng"); 
    } 
} 

class C { 
    public static void main(String args[]) { 
     B ob = new B(); 
     ob.fun(); 
    } 
} 

답변

1

private 메서드는 상속되지 않습니다. main 메서드에서 B 변수에 fun() 메서드를 호출하고 있습니다. 클래스 B 및 클래스 C이 동일한 패키지에 있다고 가정하면 유형의 메서드 B에 액세스 할 수있는 것 같습니다.

는이

A ob = new B(); 
ob.fun(); 

그런했던 당신은 당신의 컴파일 오류를 얻었을 것이다.

B#fun()A#fun()과 완전히 관련이 없습니다.

0

메서드 B 클래스에서 fun()이 오버라이드되지 않습니다. 클래스 A에서 상속되지 않았기 때문입니다.

코드에서 호출하는 것은 B 클래스의 메서드이며 클래스 A 및 메서드 A#fun()과는 관계가 없습니다.

주석을 확인하려면 @Override 주석을 추가하면 컴파일 타임 오류가 발생합니다.

// Compilation error. 
Class B extends A{ 
    @Override 
    void fun(){ 
     System.out.println("ths is wrng"); 
    } 
} 

이제이 코드는 컴파일되지 않습니다.

0

둘 다 완전히 다른 방법이며 서로 관련이 없습니다. private 메서드가 상속되지 않으므로 여기에서 재정의한다는 개념이 없습니다.

0

우선, 개인 클래스는 하위 클래스에서 상속되지 않습니다. 여전히 부모 클래스와 같은 이름의 메소드를 작성하려고하면 Java 컴파일러는 하위 클래스의 메소드를 완전히 새로운 메소드로 간주하고 예외를 throw하지 않습니다. 자식 클래스의 새 메서드와 마찬가지로 부모 클래스의 private 메서드가 음영 처리됩니다.