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)
업캐스팅 되었던 슈퍼클래스가 다시 본래의 서브클래스 형으로 돌아오는 것)
명시적으로 타입을 지정해야 캐스팅이 됨
'BackEnd > Java' 카테고리의 다른 글
Java :: Code vs Heap vs Stack (0) | 2016.10.10 |
---|---|
Java :: 자바 소켓 프로그래밍(TCP) (0) | 2016.10.09 |
Java :: final과 static (0) | 2016.09.30 |
Java :: 자바 다운로드 + 이클립스 설치 (JDK 1.8 Windows8 64bit) (0) | 2016.09.04 |
Java :: PrintWriter 객체 인코딩 오류시 (0) | 2016.08.04 |