Casting
- 형변환 --> 레퍼런스타입의 형변환은 어떻게 일어나는가?
- 레퍼런스 타입의 형변환
*상속이 전제되어 있어야 한다.
*객체 내에 필드와 메소드의 접근권한에 따라서 강제형변환인지 자동형변환인지 결정된다.
*단, 부모클래스(슈퍼, 상위)에 있는 필드와 메소드가 포함되어있어야 casting 가능함.
- UpCasting
*자식클래스(서브, 하위)가 부모클래스(슈퍼, 상위)로 자동으로 형변환
*객체(하위클래스) 내 모든 필드와 메소드에 접근할 수 있는 것은 X
*상위클래스의 필드와 메소드에만 접근 가능하다.
*오버라이딩된 메소드에 한해서는 하위클래스가 가지고 있는 메소드를 사용한다. - DownCasting
*부모클래스(슈퍼, 상위)가 자식클래스(서브, 하위)로 강제형변환
*ex) Child c1 = (Child)new Parents();
=> 해당 구문은 문법적인 오류가 없지만 사용이 불가능함
=> Parents 설계도만으로는 Child 객체를 만들어 낼 수 없음
=> UpCasting된 객체를 다시 본래의 자료형으로 강제로 되돌리는 것.
=> Exception(예외) : 문법적인 오류는 없으나 실행했을 때 문제가 발생하는 것.
⇔ Syntax Error(구문오류) : 문법적인 오류가 발생 -> IDE에서 잡아줄 수 있음.
*ex) Child c1 = (Child)p1;
상속기초
슈퍼클래스
package 연습장;
public class GameChip {
public void run() {
System.out.println("");
}
}
서브클래스1
package 연습장;
public class Animal extends GameChip{
public void run() {
System.out.println("동물의 숲 실행");
}
}
서브클래스2
package 연습장;
public class Mario extends GameChip{
public void run() {
System.out.println("마리오 실행");
}
}
서브클래스3
package 연습장;
public class Zelda extends GameChip{
public void run() {
System.out.println("젤다 게임 실행");
}
}
Main
package 연습장;
public class GameMain {
public static void main(String[] args) {
Animal a = new Animal();
insert(a);
Mario m = new Mario();
insert(m);
Zelda z = new Zelda();
insert(z);
}
public static void insert(GameChip gc) {
gc.run();
}
}
'언어 > JAVA' 카테고리의 다른 글
Interface(인터페이스) (0) | 2023.03.13 |
---|---|
OOP_추상화 (0) | 2023.03.11 |
ArrayList_제네릭 기법 + for-each문 (0) | 2023.03.10 |
OOP_클래스와 객체, 배열 (0) | 2023.03.09 |
객체지향 프로그래밍(Object Oriented Programming) (0) | 2023.03.07 |
댓글