2016-10-12 6 views
1

부모 클래스 및 부모 클래스 Child.From 자식 클래스 상위 재정의 된 메서드 (show)를 호출합니다. 부모 클래스에서 다른 메서드 (display)를 호출하지만 해당 메서드도 재정의됩니다. 어느 child 메소드가 불려 갔는지 show 메서드에서 부모 메서드 디스플레이를 호출하려고합니다.부모 재정의 된 메서드를 호출하는 방법

public class Parent { 


    public void show() 
    { 
     System.out.println("Show of parent "); 
     this.display(); 
    } 

    public void display() 
    { 
     System.out.println("Display of parent"); 
    } 

} 

public class Child extends Parent{ 

    public void show() 
    { 
     System.out.println("Show of child "); 
     super.show(); 
    } 

    public void display() 
    { 
     System.out.println("Display of child"); 
    } 

    public static void main(String[] args) { 
     Parent obj = new Child(); 
     obj.show(); 
    } 


} 

출력 :

Show of child 
Show of parent 
Display of child 

필요 :

Show of child 
Show of parent 
Display of parent 

즉, 내가 같은 클래스의 show() 방법에서 상위 클래스의 display() 메소드를 호출 할 와

+0

당신은 쇼에서했으나 디스플레이에는 없었습니다 ... 왜? 디스플레이에서 super.display()를 호출하십시오. – AxelH

+0

@AxelH 같은 클래스의 show() 메소드로부터 부모 클래스의 display() 메소드를 호출하고 싶습니다 – Kick

답변

2

무슨 잘못 :

public void show() 
{ 
    System.out.println("Show of child "); 
    super.show(); 
    super.display(); 
} 

그리고 레코드에 대한 6,: 당신은 정말 정말 정말 각각 재정의 뭔가를 생각하는 어떤 방법에 @Override를 넣고 싶다. 이라고 가정하고 실제로 수행하지 않고 무언가를 무효화합니다. @Override는 실수를했을 때 컴파일러에게 알려주도록 지시합니다.

편집 :주의 사항 - 특정 상황에서는 show + 표시를 "함께"호출하는 것이 좋습니다. 그렇다면 : 메서드를 "인터페이스"에 두 개만 넣으십시오! 내 말은 : 만약 그 방법의 아이디어가 하나씩 차례로 달리는 것이라면, 그렇게 할 수있는 의미있는 방법을 제공하십시오.

다른 말로하면 : 좋은 인터페이스는 쉽게 할 수 있습니다. 오른쪽 것; 그리고 열심히 건 잘못했다. 거기에 두 가지 메소드가 있고, 다른 코드가 순서대로 호출 할 것으로 예상하면 그 생각의 반대가됩니다. 그것은 일을 잘못하도록 쉽게 만듭니다. 바로 일을 제대로하기가 어렵습니다.

마지막으로 : 이미 네이밍은 특정 디자인 문제가 있음을 지적합니다. 다음과 같이 : 처음에 "표시"와 "표시"의 차이점은 무엇입니까?!

+0

같은 클래스의 show 메소드로부터 Parent 클래스의 표시 메소드를 호출하고 싶습니다. – Kick

+0

Tx. 그렇지만 부모님의 표시 방법을 같은 클래스의 쇼 방식에서만 호출하고 싶습니다 – Kick

+0

인정하고 싶습니다만 : 문제는 없습니다. 내 코드 예제에서는 찾고 있던 출력을 만들어야합니다. – GhostCat

관련 문제