Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Goru

[JAVA]다형성 본문

Java

[JAVA]다형성

gorusair 2022. 1. 26. 23:43

다형성이란?

객체지향개념에서 다형성이란 '여러 가지 형태를 가질 수 있는 능력'을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다.

 

class Tv{
	boolean power;	//전원상태 (on/off)
    int channel;	//채널
    
    void power()	{	power = !power; }
    void channelUp	{ ++ channel;		}
    void channelDown{ -- channel;		}
    
    }
    
    class CaptionTv extends Tv{
    	String text;		//캡션을 보여 주기 위한 문자열
        void caption()		//{/*내용생략*/}
        }
조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.

참조변수의 형변환

기본형 변수와 같이 참조변수도 형변환이 가능하다. 단, 서로 상속관계에 있는 클래스사이에서만 가능하기 떄문에 자손타입의 참조변수를 조상타입의 참조변수로, 조상타입의 참조변수를 자손타입의 참조변소로의 형 변환만 가능하다.

 

자손타입 -> 조상타입(Up-casting) : 형변환 생략가능
자손타입 <- 조상타입(Down-casting) : 형변환 생략불가
class Car{
	string color;
    int door;
    void drive(){		//운전하는 기능
    	System.out.println("drive, Brrrr~");
        }
    void stop(){		//멈추는 기능
    	System.out.println("stop!!!!");
    }
  }
  
  class FireEngine extends Car{	// 소방차
  	void water(){		//물 뿌리는 기능
    	System.out.println("water!!!");
        }
     }
  class Ambulance extends Car{	//앰뷸런스
  	void siren(){				//사이렌을 울리는 기능	
    	System.out.println("siren~~~");
        }
     }
public class CastingTest1 {
	public static void main(String[] args) {
		Car car = null;
		FireEngine fe =new FireEngine();
		FireEngine fe2 = null;
		
		fe.water();
		car = fe;// car = (Car)fe;에서 형변환이 생략된 형태이다.
//		car.water();
		fe2 = (FireEngine)car; //자손타입 <- 조상타입
		fe2.water();
	}
}

class Car{
	String color;
	int door;
	
	void drive() {	// 운전하는 기능
		System.out.println("drive, Brrrr~");
	}
	void stop() {	// 멈추는 기능
		System.out.println("stop!!!");
	}
}
class FireEngine extends Car{	//소방차
	void water() {	//물을 뿌리는 기능
		System.out.println("water!!!");
	}
}

 

'Java' 카테고리의 다른 글

[Java]instanceof 연산자  (0) 2022.01.27
[JAVA]제어자  (0) 2022.01.21
[Java]package 와 import  (0) 2022.01.20
[Java] 오버라이딩  (0) 2022.01.20
[Java] 클래스간의 관계- 포함관계  (0) 2022.01.19