
형변환도 상속관계에서는 자식 클래스만 사용 가능하다.
이게 무슨 소리냐 하면
Object 는 최상위 클래스이다.
그렇기에 자식클래스인 String, int 형 등등이 사용할 수 있다.
하지만 자식클래스가 부모 클래스의 기능을 사용하는 것은 괜찮아도 부모 클래스가 자식클래스만이 갖고있는 메서드 등을 막 사용할 수 없다.
사용하기 위해서는 형변환이 필요하다.
형변환 포스트 바로가기
E.g.
Object obj = new Object();
String str = (String)obj;
이런식으로 하나하나 형변환이 귀찮으니 애초부터 가상의클래스를 만드는 것이 generic 이다.
generic 의 사용법은 변수 앞 자료형 대신 generic 을 취할 변수를 사용해주면 된다.
public class Generic<E> {
private E obj;
public void setObj(E obj){
this.obj = obj;
}
public E getObj(){
return obj;
}
}
이렇게 선언을 마쳤으면 이제 사용해보자.
public class GenericExam {
public static void main(String[] args) {
//String
Generic<String> str = new Generic<>();
StringBuffer bf = new StringBuffer();
str.setObj(bf.append("hi ").append("Good to see you!").toString());
String strResult=str.getObj();
System.out.println(strResult);
//Integer
Generic<Integer> integer = new Generic<>();
integer.setObj(2+2);
int intResult=integer.getObj();
System.out.println(intResult);
//Object
Generic<Object> obj=new Generic<>();
obj.setObj(new Object());
obj.getObj();
}
}
main 에서 generic 을 사용할 때는
인스턴스화 하는 부분에 생성자 + <원하는 자료형> + 변수 이름 = new ... 형식으로 사용하면 된다.
각각 generic 변수로 string, integer, object 를 getter 와 setter 로 받고 리턴하고 있다.
이처럼 generic 은 가상의 클래스를 지정함으로써
정해지지 않아 유동적이게 사용 가능하다.