1. 업캐스팅 (Upcasting)

서브클래스가 슈퍼클래스의 타입으로 형 변환되는 것

객체 내의 모든 멤버(변수, 메소드)에 접근할 수 없고, 슈퍼클래스의 멤버(변수, 메소드)에만 접근이 가능함

자식 클래스의 타입으로 업캐스팅을 했을 시, 상속에 의해 자식 클래스 + 부모 클래스 둘 다 호출이 가능함

자동적 형변환

 

 

a. 변수를 업캐스팅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package kr.or.example.A;
 
public class Casting_Main {
    public static void main(String[] args) {
//      변수 선언, 초기화
        int a = 10;
        double b;
        
        System.out.println("console> before a : " + a);
        
//      상위 형인 double 형으로 변수 업캐스팅
        b = (double) a;
        
        System.out.println("console> after a : " + a);
        System.out.println("console> b : " + b);
    }
}
cs

 

 

 

b. 클래스를 업캐스팅

1
2
3
4
5
6
7
8
9
10
11
package kr.or.example.A;
 
public class Person {
    String name;
    String id;
    
//  생성자에서 name 변수 초기화
    public Person(String name) {
        this.name = name;
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package kr.or.example.A;
 
//Person 클래스를 상속받는 Student 클래스
public class Student extends Person {
    String grade;
    String department;
 
//  생성자 호출시 super 키워드를 이용하여 부모 클래스의 동명 메소드 호출
    public Student(String name) {
        super(name);
        
        System.out.println("console> name : " + name);
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package kr.or.example.A;
 
public class Person_Main {
    public static void main(String[] args) {
//      부모 클래스 객체 생성
        Person person;
//      자식 클래스 객체를 생성하고 인자를 넣어줌
        Student student = new Student("미니");
        
//      자식 클래스 객체 인스턴스를 부모 클래스 객체 인스턴스로 형을 변환함(업캐스팅)
        person = student;
        
//      Person 클래스 생성자에서 부모 클래스의 메소드를 호출했지만
//      자식 > 부모가 아닌 자식 = 부모가 되었기 때문에 출력 시
//      자식 클래스의 내용 먼저 출력된다(콘솔 창에서 출력 가능).
        System.out.println(person.name);
    }
}
cs

 

 

 

 

* instanceof 연산자

업캐스팅을 한 경우 레퍼런스가 가리키는 실제 객체가 어떤 클래스 타입인지 구분이 어려워지기 때문에 사용

 

 

2. 다운캐스팅 (Downcasting)

업캐스팅 되었던 슈퍼클래스가 다시 본래의 서브클래스 형으로 돌아오는 것)

명시적으로 타입을 지정해야 캐스팅이 됨

+ Recent posts