새소식

💻 Computer/🦀 Java

(Java) 다형성

  • -

오늘은 다형성에 대해 알아볼 것인데 이것을 설명하기 전에 알아야 할 것

객체지향(OOP)

자바는 객체지향 언어이다.

 

 


객체지향

객체가 중심이 되는 것

객체 하나하나가 무슨 일을 할 것인가를 생각해 주어야 한다.

 

그럼 다형성에 대해 알아보자

 


다형성

 

public class Main {

	public static void main(String[] args) {

		Person p1 = new 김전헌(22);
		p1.breath(); //출력 : Person 22 숨쉬다

		Person p2 = new 박진수(100);
		p2.breath(); // 출력 :Jinsun 100 숨 쉰다.
	}

}

//사람 클래스
class Person {
	String name;
	int age;

	Person() {
		// this 간략화 중복을 막아줌
		this(0);
	}

	Person(int age) {
		this.age = age;
		this.name = " ";
	}

	public void breath() {
		System.out.printf("Person %d 숨을 쉬다\n", this.age);
	}
}

//김전헌 클래스
class 김전헌 extends Person {

	// super을 사용하지 않아도 됨 (복습차 사용함)
	김전헌() {
	}

	김전헌(int age) {
		super(age);
		this.name = "김전헌";
	}
}

//박진수 클래스
class 박진수 extends Person {

	// super을 사용하지 않아도 됨 (복습차 사용함)
	박진수() {
	}

	박진수(int age) {
		super(age);
		this.name = "박진수";
	}

	public void breath() {
		System.out.printf("Jinsun %d 숨 쉰다.\n", this.age);
	}
}

잡다한 것이 많이 들어가긴 했으나 내가 몰랐던 것을 구글링 해보면서 만들어 보았다.

특히  this 간략화,  자식 클래스에서의 super 생성자

 

뭔가 알고리즘 적으로 올바른지는 익숙하지도 않고 오래 생각하며 만들지 않아서

모르겠지만 좀 더 익숙해지기 위한 연습이라 생각한다.

 


다시 본론

 

왜 출력이 저렇게 나왔을까?

 

public class Main {

	public static void main(String[] args) {

		Person p1 = new 김전헌(22);
		p1.breath(); //출력 : Person 22 숨쉬다

		Person p2 = new 박진수(100);
		p2.breath(); // 출력 :Jinsun 100 숨 쉰다.
	}

}
Person p1 = new 김전 헌(22) 이게 어떻게 가능한가

Person Class를 extends 하고 있는 김전헌 Class 

즉 Person Class를 상속받고 있기 때문에 가능하다.

 

p1.breath()는 왜 Person Class의 breath Method를 호출하는 것일까?

그 이유는 다형성에서는 오버 라이딩한 것을 우선순위로 보기 때문이다.

 

그렇기 때문에 p2.breath()에서는 박진수 Class에서

오버 라이딩한 breath Method가 나오는 것이다.

 

 

 

'💻 Computer > 🦀 Java' 카테고리의 다른 글

[Java] Arrays.asList()은 무엇인가  (0) 2022.07.21
Java this 와 super  (0) 2022.07.17
java 숫자인지 판별  (0) 2022.07.02
인력 관리소 문제 (java)  (0) 2022.07.02
(Java) Class 상속  (0) 2022.06.18
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.