캐스팅(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

+ Recent posts