가 나는 두 클래스 아래 정의 : 클래스 이름을 모른 채 메서드를 호출하는 방법은 무엇입니까?
public class junk {
private BigInteger a = BigIngeger.valueOf(1), b=BigInteger.valueOf(2), c;
public void DoSomething() {
c = a.add(b);
}
// ... other stuff here
}
public class junkChild extends junk {
private BigDecimal a = BigDecimal.valueOf(1), b=BigDecimal.valueOf(2), c;
// I want a, b, c to override the original BigInteger a,b,c
// ... other stuff here
}
public class myClass {
public static void main(String args[]) {
junk a1 = new junkChild();
a1.DoSomething();
}
}
는 불행하게도 위에서 작동하지 않습니다. 내가 원하는 무엇
단순히 다시 DoSomething()
을 다시 작성하지 않고도 junkChild
에 a
, b
, c
BigDecimal
로 변경하는 것입니다. 코드를 다시 작성해야하더라도 코드는 정확히 동일하므로 작성하지 않고이 작업을 수행 할 수있는 방법이 있어야합니다. DoSomething
함수는 유형 a1
에 올바른 입력 및 반환 유형의 add
메소드가 있는지 확인해야하며, 그렇다면 a
, b
, c
유형을 걱정하지 않고 호출합니다.
이 작업을 수행 할 수 있습니까?
리플렉션에서 읽어야합니다. 그것은 귀하의 질문의 두 번째 부분을 수행합니다. 첫 번째 부분에서는'a', b' 및'c' 필드를 직접 사용하지 말고 대신 하위 클래스에서 재정의하는 getA','getB' 및'getC' 메서드를 사용하십시오. –
정말로 원하는 것은 C++과 같은 템플릿입니다. –
그가 정말로 원하는 것은 "오리 타이핑"이라고 들리는 것 같습니다. – Asaph