2014-11-14 1 views
-1

클래스에 Object 매개 변수가있는 메소드가 있다고 가정하고, 더 최신 vesion 개발자는 Ojbectint으로 변경하기로 결정했습니다. 자료의Java 상속, 기본 클래스의 매개 변수 유형 변경

public class Base { 
    public void foo(Object i) 
    { 
      System.out.println("ahahaa"); 
    } 
} 

public class Child extends Base 
{ 
    public void foo(Object i) 
    { 
     System.out.println("tru-la-la"); 
    } 
} 

그런 다음 새 버전 : 예를 들어

우리는 "ahaha"GET 대신합니다

Child child = new Child(); 
child.foo(5); 

: 다음

public class Base 
{ 
    public void foo(int i) 
    { 
      Console.WriteLine("ahahaa"); 
    } 
} 

우리가 호출하는 경우처럼 뭔가 예상 "트루 라라"

그러면 어떻게 해결할 수 있으며 어떤 아키텍처 솔루션을 사용해야합니까?

+0

왜 '트루 라라'를 기대 했습니까? –

+0

"tru-la-la"를 기대하는 이유는 무엇입니까? 5 int 형식이므로 int 형식의 메서드는 – Jens

+0

이라고합니다. Java 언어 사양 : https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12를 참조하십시오. .2.5 –

답변

2

"ahaha"가 아닌 "tru-la-la"(기본 클래스에서 변경하기 전에 사용했던)가 아닌 이유에 대한 설명을 찾는 것이 아닌 것 같습니다.

다른 개발자가 사용할 라이브러리를 릴리스하는 경우 이전 버전과의 호환성을 유지해야합니다. Base 클래스에서 설명하는 코드는 역 호환성을 존중하지 않으므로 코드에 의존하는 코드는 중단됩니다.

코드를 변경하거나 해당 라이브러리를 사용하는 것 외에 다른 방법은 없습니다.

코드를 변경할 수 있습니다 (예 : child.foo(new Integer(5))). 하위 클래스 메서드를 호출합니다.

도울 수있는 또 다른 사항은 @Override 주석이있는 Child 클래스의 메서드를 표시하는 것입니다. 이렇게하면 Base 클래스가 변경된 후 코드가 컴파일되지 않습니다.

+0

괜찮 았어, 고마워, 진짜 삶의 예가 아니야, C# 프로그래머가 자바에서이 기능에 대해 물어 보았다. 왜냐하면 C#에서는 어쨌든 자식 메소드라고 부르기 때문이다. – DeadKennedy

0

int를 사용하는 경우 -child.foo (5); JVM은 자연스럽게 가장 구체적인 자식 객체에서 메소드를 가져옵니다. 이 경우는 이

공공 무효 foo는 (객체 내가) {

&

공공 무효 foo는 사이의 선택 {

보다 구체적인이다 (내가 INT) -

공개 무효 foo (int i) { "아하하아"를 말합니다

관련 문제