다형성이란? 하나의 메소드 또는 객체가 다양한 형태로 동작할 수 있는 성질을 의미한다.
대표적인 다형성의 구현방법으로는 오버로딩, 오버라이딩, 업캐스팅, 다운캐스팅 등이 있다.
Overloading(오버로딩)
◆ 같은 이름의 메소드를 넘쳐서 여러개 불러오는(선언하는) 기법
매개변수의 개수 혹은 타입이 다르다면 매개변수로 각각을 구분할 수 있기 때문에
같은 이름의 메소드를 여러개 선언할 수 있다.
오버로딩 된 메소드를 사용할 시
전달된 값의 타입 혹은 개수로 구분하여 알맞은 메소드가 자동으로 호출된다.
생성자도 메소드와 비슷한 성질을 띄고 있기 때문에 오버로딩이 가능하다
아래 예시는 생성자가 오버로딩 된 경우이다.
public class Car {
String model;
String color;
int price;
//기본 생성자
public Car() { }
//Alt+Shift+S > O : 필드(변수)를 이용해서 생성자 만들기
public Car(String model, String color, int price) {
this.model = model;
this.color = color;
this.price = price;
}
public Car(int price) {
this.price = price;
}
//오버로딩은 매개변수의 자료형으로 구별 -> 자료형의 순서나 개수가 다르다면 선언 가능
public Car(String model, int value, String color2) {
}
void engineStart() {
System.out.println(this.model+" 시동 켜기");
}
void engineStop() {
System.out.println(this.model+" 시동 끄기");
}
}
Overriding(오버라이딩)
◆ 상속받은 메서드를 자식 클래스에서 새롭게 덮어쓰는 기법
부모 필드에 a()라는 메소드가 존재한다면 자식 객체 생성시 부모 필드가 먼저 메모리에 올라가게 되므로
부모의 a()가 메모리에 먼저 존재한다.
그 다음 자식 필드를 완성시킬 때 똑같은 이름의 a()라는 메소드가 존재한다면
같은 이름으로 2개가 만들어지는 것이 아니라
기존에 만들어진 부모 필드의 a() 메소드 대신에 자식에서 작성한 내용이 사용된다.
(부모 필드에 있는 a()에 자식에서 작성한 내용이 덮어 씌워진다.)
그러므로 자식 객체로 a() 메소드를 사용하게 되면
재정의된 기능으로 사용하며 이것을 오버라이딩 이라고 한다.
public class SuperCar extends Car {
String mode;
public SuperCar() {
//super : 상속받고 있는 부모 클래스의 이름
//ex) super(); ---> Car();
super();
}
//Alt + Shift + S > C : 부모 생성자를 받아와서 똑같은 형태의 생성자 만들기
public SuperCar(int price) {
super(price);
}
public SuperCar(String model, String color, int price) {
super(model, color, price);
}
//Alt + Shift + S > O
public SuperCar(String model, String color, int price, String mode) {
super(model, color, price);
this.mode = mode;
}
//@ : 어노테이션
@Override
void engineStart() {
System.out.println(this.model + " 열쇠로 시동 켜기");
}
@Override
void engineStop() {
System.out.println(this.model + " 열쇠로 시동 끄기");
}
void roofOpen() {
System.out.println(this.model + " 뚜껑 열기");
}
void roofClose() {
System.out.println(this.model + " 뚜껑 닫기");
}
}
'Backend > Java' 카테고리의 다른 글
[Java] 기초정리 14. 상속(inheritance) - 클래스 상속 (0) | 2024.08.30 |
---|---|
[Java] 기초정리 13. 클래스 배열(객체 배열) - 클래스 배열 선언, 사용 (0) | 2024.08.20 |
[Java] 기초정리 13. 생성자 - 생성자 선언, this (0) | 2024.08.09 |
[Java] 기초정리 12. 클래스 - 클래스 선언, 사용 (0) | 2024.08.08 |
[Java] 기초정리 11. 메소드 - 메소드 선언, 사용 (0) | 2024.08.07 |