본문 바로가기

DATA 분석 교육 과정 (2024.02~08)/JAVA

JAVA_상속

728x90
상속이란?

 

 - 기존 클래스의 변수(데이터)와 메소드(로직, 코드)를 물려받아 새로운 클래스 구성하는 것

 

장점

 

  - 기존 클래스의 변수와 코드를 재사용  > 코드의 중복 감소,  클래스 간결화

  - 먼저 작성된 검증된 프로그램을 재사용 > 신뢰성 있는 프로그램 손쉽게 개발

  - 클래스간 계층적 분류 및 관리  > 유지 보수 용이

 

상속방법

 

CLASS서브클래스 extends 슈퍼클래스

   - 슈퍼 : 원래 클래스

   - 서브 : 확장된 개념

 

 

 

 

 

 

 

 

 

[예시]

 public class Phone {	
	public void call()
	{
		System.out.println("전화걸기");
	}
	
	public void message()
	{
		System.out.println("메세지 보내기");
	}

 

 

 

public class SmartPhone extends Phone { //"extends Phone"여기서 추가 기입

	
	// phone의 기능을 물려받아서 새롭게 만들어진 smartphone 클래스

	// 전화, 메세지 , 카카오톡 기능 확장
	
//      public void call() {
//	System.out.println("전화걸기");
//	}
      // 메소드 오버라이딩-재정의 (상속되어 추가?)
      public void call() {
    	  System.out.println("영상통화 전화걸기");
      }
//	public void message() {
//		System.out.println("메세지 보내기");
//	}
	public void kakao() {
		System.out.println("카톡 보내기");
	}

	// main class로 실해해보기
}

 

public class PhoneMain {
	public static void main(String[] args) {
		
		// 해당 클래스들이 잘 사용되는지 확인
		
		Phone pho= new Phone();
		pho.call ();
		pho.message();		
		
		SmartPhone smart = new SmartPhone();
		smart.call();		
		smart.message();
		smart.kakao();
		
		// 중복되는 내용 상속으로 바꿔보기 
		
		// phone클래스로 가서 extends 기입하기

 

상속의 특징

 

 - 다중상속을 지원하지 않는다.(하나의 클래스에 대해서만 extends에 해당된다.)

 - 상속의 횟수에 제한을 두지 않는다. 

 - 모든 클래스는 java.lang.Object를 상속받는다. 

 

메소드 오버라이링

: 부모 클래스가 가지고 있는 메소드를 그대로 가지고 와서 (리턴 타입, 메소드명, 매개변수) 중괄호 안쪽의 로직(알고리즘)만의 재정의 하는 기법

 

Casting

  : 기존 데이터 타입을 다른 데이터 타입으로 변환하는 것

   

** 업캡스팅, 다운캐스팅: 상속위 아래로 갈지 여부 확인하는 개념,,

 

업캐스팅 (Upcasting)

 

 - 하위클래스가 상위 클래스 타입으로 자동 타입 변환하는 것(다형성)

 - 객체 내 모든 변수, 메소드에 접근 할 수 없고 상위 클래스의 변수, 메소드에만 접근 가능

 - 단 하위 클래스가 상위 클래스의 메소드를 오버라이딩한 경우 하위 클래스의 메소드 호출

 

다운캐스팅 (DownCasting)

 

 -  업캐스팅 된 객체를 강제(명시적) 타입 변환으로 다시 되돌리는 것

 -  업캐스팅 된 객체가 아니더라도 문법적인 오류는 없지만 실행 후 compile시 문제가 발생한다. 

  예) Child c = (Child) new Parent

 

 

[예시 1.] 게임

   public class Animal extends Game { // extends Game을 기입해서 게임으로 올라가서 시작하겠습니다...
	public void start() {
		System.out.println("동물의 숲 게임 시작");
	}	
}

 

   public class Mario extends Game{
	public void start() {
		System.out.println("마리오 게임 시작 ");
	}
}

 

    public class Pokemon extends Game{
	public void start()
	{
		System.out.println("포켓몬 게임시작!");
	}	
}

 

    public class Game {
// 닌텐도 게임 구매시 기본을 들어있는 게임칩
	public void start() {		
	System.out.println("게임을 시작하겠습니다. ");
	}	
}

 

 

public class GameMain {

	public static void main(String[] args) {

		// 게임칩이 실제로 실행될 게임기라 생각하기 
		
		
//		Pokemon game1 = new Pokemon ();
//		insert(game1); // 1. insert 매소드 만들기 
//		
		
		Pokemon game1 =  new Pokemon (); //4.
		insert(game1);		
		

	     Mario game2 =  new Mario(); 
	    insert(game2);		
	
		
		Animal game3 =  new Animal();
		insert(game3);		
		
		
			
	
	
	
	

	// 2. 게임을 시작할 수 있는 insert()생성하기 	
//	public static void insert(Pokemon game1) { //3.
//		game1.start();		
//	}
	
	
//	public static void insert(Mario game2) { //5.
//		game2.start();		
//	}
	
	// 6. 모든 게임이 들어 올 수 있게 만들어 주기 
	
	
	public static void insert(Game game1) { //3.
		game1.start();		
	}
	
	
}

 

 

[예시 2. ] 다형성

public class Animal {
	
	public void cry()
	{
		System.out.println("동물의 우는 소리");
	}
	
	public void eat()
	{
		System.out.println("동물의 먹을 수 있는 것");
	}
	
	public void move()
	{
		System.out.println("동물의 움직임");
	}
	
}

 

public class Cat extends Animal{

	public void cry() {
		System.out.println("야홍아홍 우는 소리");
	}
	
	public void eat() {
		System.out.println("츄르 냠냠");
	}
	
	public void move() {
		System.out.println("살금살금");
	}
	}

 

 

public class Dog extends Animal {
	public void cry() {
		
		System.out.println(" 멍멍 짖기");
	}
	public void eat() {
		
		System.out.println("맛있는 뼈다귀");
	}
	public void move() {
		
		System.out.println(" 격한 꼬리 흔들기");
	}
	
}

 

public class Dog extends Animal {
	public void cry() {
		
		System.out.println(" 멍멍 짖기");
	}
	public void eat() {
		
		System.out.println("맛있는 뼈다귀");
	}
	public void move() {
		
		System.out.println(" 격한 꼬리 흔들기");
	}

}

출처:스마트인재개발원

728x90
반응형