업캐스팅
서브클래스는 슈퍼클래스의 모든 특성을 상속받는다. 따라서 서브 클래스는 슈퍼클래스가 될 수 있다.
즉, 서브 클래스가 슈퍼 클래스가 되는 것을 업 캐스팅이라고 한다.
class Person{
String name;
String id;
public Person(String name){
this.name = name;
}
}
class Student extends Person{
String grade;
String department;
public Student(String name){
super(name);
}
}
public class UpcastingEx{
public static void main(String[] args){
Person p;
Student s = new Student("이재문");
p = s; //업 캐스팅 발생
System.out.println(p.name); //정상 컴파일
Ststem.out.println(p.grade); //컴파일 오류
}
}
Student로 인스턴스를 생성하고 Person 레퍼런스 타입으로 담았다.
다시 말해서 Person클래스의 멤버만 접근이 가능하고 Student의 멤버는 접근이 불가능하다.
다운캐스팅
서브 클래스가 슈퍼 클래스로 변했을 때 서브 클래스의 인스턴스는 잠시 가려져 있을 뿐 사라지지 않는다.
서브 클래스의 원래 특성으로 돌려 놓는게 다운 캐스팅이다.
다운 캐스팅은 업 캐스팅과 달리 명시적으로 타입을 지정해야 한다.
UpcastingEx클래스 부분만 수정한다.
public class DowncastingEx{
public static void main(String[] args){
Person p = new Student("이재문"); //업 캐스팅 발생
Student s;
s = (Student)p; //다운 캐스팅
System.out.println(s.name); //정상 작동
s.grade = "A"; //컴파일 오류
}
}