안녕하세요, 다형성에 문제가 있습니다.자바에서 다형성의 작은 오해가
일반적으로 나는 그것이 무엇을 의미하는지 이해했다고 생각합니다. 아래에 MWE를 추가했습니다.
나는 콘솔에 Using String
텍스트의 두 배를 얻을 것으로 예상했다. 사실 나는 두 가지 텍스트를 모두 얻습니다. 왜?
이유는 방문자 패턴과 같은 패턴을 만들고 싶습니다. if(... instanceof ...)
의 체인을 피하고 싶습니다. 따라서 각 메서드에 대해 오버로드 된 메서드 (여기 String
및 Object
)를 구현한다고 생각했습니다.
질문은 이제 java를 올바른 방법으로 선택하는 방법입니다.
추신 : 제가이 문제가있는 이유는 기본 유형을 다른 용도로 사용하기 위해 클래스에 '상자'해야한다는 것입니다. 따라서 Integer
, Boolean
을 테스트해야합니다.이 또한 클래스를 확장하고 일반적인 방법을 사용할 수없는 이유이기도합니다.
public class TestOverload
{
public static void main(String[] args)
{
String s = "abc";
Object o = s;
TestOverload test = new TestOverload();
test.doSomething(s);
test.doSomething(o);
}
public void doSomething(Object o)
{
System.out.println("Using Object");
}
public void doSomething(String s)
{
System.out.println("Using String");
}
}
Java는 메소드 인수에 대해 후기/정적 바인딩을 사용합니다 (어쩌면 [this] (http://stackoverflow.com/questions/3883414/is-there-any-reason-that-java-uses-late-static-binding- for-overloaded-methods-in? rq = 1) 질문이 유용합니다. 적절한 메소드를 선택하기 위해서는'instanceof'를 묶어야 할 것 같은데요. – MBlanc