Eggs Sunny Side Up
본문 바로가기
언어/JAVA

OOP_상속

by guswn100059 2023. 3. 11.

Casting

  • 형변환 --> 레퍼런스타입의 형변환은 어떻게 일어나는가?
  • 레퍼런스 타입의 형변환
    *상속이 전제되어 있어야 한다.
    *객체 내에 필드와 메소드의 접근권한에 따라서 강제형변환인지 자동형변환인지 결정된다.
    *단, 부모클래스(슈퍼, 상위)에 있는 필드와 메소드가 포함되어있어야 casting 가능함.
  1. UpCasting
    *자식클래스(서브, 하위)가 부모클래스(슈퍼, 상위)로 자동으로 형변환
    *객체(하위클래스) 내 모든 필드와 메소드에 접근할 수 있는 것은 X
    *상위클래스의 필드와 메소드에만 접근 가능하다.
    *오버라이딩된 메소드에 한해서는 하위클래스가 가지고 있는 메소드를 사용한다.

  2. 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

댓글