캐스팅(Casting) : 타입을 변환 하는 것, 형변환이라고도 함
업캐스팅(Upcasting)
- 서브 클래스의 객체 : 슈퍼클래스의 멤버를 모두 가지고 있으며, 슈퍼 클래스의 객체로 취급할 수 있음
- 업캐스팅 : 서브클래스 객체를 슈퍼클래스 타입으로 변환
- 업캐스팅된 레퍼런스 : 객체내의 슈퍼클래스 멤버만 접근 가능
class Player{
String team;
int backNum;
public Person(String team){
this.team = team;
}
}
class FootballPlayer extends Player{
String pos;
public Student(String team){
super(team);
}
}
public class UpCast{
public static void main(String[] args){
Player p;
FootballPlayer fp = new FootballPlayer("Arsenal");
p = fp;//업 캐스팅
fp.pos = "Midfielder";//오류 없음
System.out.print(p.team);//오류 없음
p.pos = "Goalkeeper"//!컴파일 오류!
}
}
다운캐스팅(Downcasting)
- 슈퍼 클래스의 객체를 서브 클래스 타입으로 변환
- 개발자의 명시적 타입 변환 필요
public class DownCast{
public static void main(String[] args){
Player p = new FootballPlayer("Arsernal");
FootballPlayer fp;
fp = (FootballPlayer)p;//다운 캐스팅
fp.pos = "Midfielder"//오류 없음
System.out.print(fp.team);//오류 없음
}
}
업캐스팅 레퍼런스 객체의 타입
- 업캐스팅된 레퍼런스로 객체의 타입 판단은 어려움
- instanceof 연산자
- 레퍼런스가 가리키는 객체의 타입 식별을 위해 사용
- 사용법
- 객체레퍼런스 instanceof 클래스타입
- 연산의 결과 : true/false
class Person{}
class Programmer extends Person{}
class Player extends Person{}
class FootballPlayer extends Player{}
Person Kim = new Programmer();
Person Son = new FootballPlayer();
Person Ryu = new Player();
if(Kim instanceof Programmer)//True
if(Kim instanceof Player)//False
if(Son instanceof Person)//True
if(Son instanceof FootballPlayer)//True
if(Son instanceof Player)//True
if(Ryu instanceof Player)//True
if(Ryu instanceof FootballPlayer)//False
'JAVA' 카테고리의 다른 글
[Java.3-4] 추상 메소드와 추상 클래스 (0) | 2022.04.16 |
---|---|
[Java.3-3] 메소드 오버라이딩 (0) | 2022.04.16 |
[Java.3-1] 상속 basic (0) | 2022.04.16 |
[Java.2-5] static 과 final (0) | 2022.04.15 |
[Java.2-4] 접근 지정자 (0) | 2022.04.15 |