본문 바로가기
Backend/JAVA

[JAVA] 다형성 (polymorphism)

by howdyoon 2023. 3. 21.

다형성 Polymorphism

객체 생성

GregorianCalendar now=new GregorianCalendar();
Integer inte=new Integer(3);

다형성의 예

Calendar now = new GregorianCalendar();
Number inte = new Integer(3);

[ Father클래스 생성 후 실습 ]

package oop0320;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Test07_poly {

	public static void main(String[] args) {
		//1) 일반적인 방식으로 객체 생성
		//-> new 연산자
		//-> POJO(Plain Old Java Object) 방식
		/*
		Father fa=new Father();
		fa.disp();
		
		Son son=new Son("손흥민", "영국");
		son.disp();
		
		Daughter dau=new Daughter("김연아", "한국");
		dau.disp();
		*/
		///////////////////////////////////////////
		
		//2) 다형성을 이용한 객체 생성
		//-> 자식클래스가 부모클래스에 대입 가능하다
		//-> 부모클래스는 대입된 자식클래스의 모양으로 스스로를 변환한다
		
		Father fa=new Son("개나리", "역삼동");
		fa.disp();
		
		fa=new Daughter("진달래", "서초동");
		fa.disp();
		
		System.out.println(fa.name);
		System.out.println(fa.addr);
		//에러. 자식클래스에서 추가된 멤버는 다형성의 대상이 아니다
		//System.out.println(fa.friend);
		////////////////////////////////////////////
		
		//부모클래스도 자식클래스에 대입가능하다
		//->단, 자식클래스의 모양으로 형변환해야 한다
		/*
		Father father=new Father();
		Son son=new Son();
		
		son=(Son)father; //Exception이 발생할 수도 있다
		
		double a=3.4;
		int b=(int)a; //강제형변환
		*/
		///////////////////////////////////////////
		
		//예)
		Object obj=new Integer(3);//다형성. 자식클래스가 부모클래스에 대입
		System.out.println(obj.toString());
		
		Integer inte=(Integer) obj; //다형성
                                           //부모클래스도 자식클래스에 대입가능하지만
                                           //자식클래스의 모습으로 변환해야 한다
		obj=new Father();
		System.out.println(obj.toString());

	}//main() end
}//class end

[ Father클래스 ]

package oop0320;

class Father {
	
	//멤버변수 field 
	public String name="아버지";
	public String addr="주소";
	
	//생성자함수 constructor
	public Father() {}
	public Father(String name, String addr) {
		this.name=name;
		this.addr=addr;
	}//end
	
	//멤버함수 method
	public void disp() {
		System.out.println(this.name);
		System.out.println(this.addr);
	}//disp() end
	
}//class end

class Son extends Father{
	public Son() {}
	public Son(String n, String a) {
		super.name=n;
		super.addr=a;
	}//end
}//class end

class Daughter extends Father{
	
	String friend="절친";
	
	public Daughter() {}
	public Daughter(String n, String a) {
		super(n, a);//부모생성자 함수 호출
	}//end
}//class end

'Backend > JAVA' 카테고리의 다른 글

[JAVA] interface  (0) 2023.03.21
[JAVA] 추상클래스 (abstract class)  (0) 2023.03.21
[JAVA] super  (0) 2023.03.21
[JAVA] quiz : 주민번호 각 숫자의 합 & 대소문자 변환하여 출력  (0) 2023.03.21
[JAVA] Object 클래스  (0) 2023.03.21