public class AttentionOverloading {
public static String classify(Set s)
{
return "Set";
}
public static String classify(List lst)
{
return "List";
}
public static String classify(Collection c)
{
return "Collection";
}
public static void main(String[] args) {
Collection[] collections = {
new HashSet(),
new ArrayList(),
new HashMap().values()
};
for(Collection c : collections)
{
System.out.println(classify(c));
}
}
}
컴파일 시점 자료형은 전부 collection<?>으로 동일 하기에 그러한 결과를 나타낸다.
오버로딩된 메서드는 정적으로 선택 되지만, 이 와 반대로 재정의 된 메서드는 동적으로 선택 된다.
class Wine{
String name() {return "wine";}
}
class SparklingWine extends Wine{
@Override String name() {return "sparkling wine";}
}
class Champagne extends SparklingWine{
@Override String name() {return "champagne";}
}
public class DynamicChoice {
public static void main(String[] args) {
Wine[] wines ={
new Wine(),
new SparklingWine(),
new Champagne()
};
for(Wine wine : wines)
{
System.out.println(wine.name());
}
}
}
반응형
'프로그래밍 > Java' 카테고리의 다른 글
Java - 객체 참조시 자료형을 인터페이스를 선호하라. (0) | 2015.09.15 |
---|---|
Java - String (0) | 2015.09.15 |
Java - 변경 불가능한 객체 관한 이야기 (0) | 2015.09.15 |
Intellij에서 Java lambda 사용시 Error 해결 (0) | 2015.08.21 |
Java Generic Erasure (0) | 2015.08.01 |