[Java] 객체지향프로그래밍 - 다형성
by 우와한개발자
객체지향프로그래밍의 주요 특징으로는 추상화, 캡슐화, 상속, 다형성이 있다.
다형성(polymorphison)은 하나의 객체가 여러 가지 유형으로 사용되는 것으로, 상속을 전제로 한다.
1. 다형적 객체
- 부모 클래스로 선언한 변수는 상속 관계에 있는 자식클래스의 인스턴스를 할당 받을 수 있다.
- 다형적 객체 : 부모로 선언하고 자식 인스턴스를 참조하는 객체
class Parent{ ... }
class Child1 extends Parent{ ... }
public class Test{
public static void main(String[] args) {
Parent p = new Child(); //다형적 객체
}
}
2. Virtual Method Invocation
- 다형적 객체의 메서드를 호출하면 자식클래스의 재정의된 메서드를 호출
- 다형적 객체의 메서드를 호출할 때는 부모로부터 상속받은 것이나 오버라이드한 메서드만 호출 가능 (즉, 호출하고자 하는 메서드는 반드시 선언된 클래스에 존재해야함)
class Parent{
public void method(){ System.out.println("parent");}
}
class Child extends Person{
@Override
public void method(){ System.out.println("child");}
public void method2(){ System.out.println("only child");}
}
public class Test{
public static void main(String[] args) {
Parent p = new Child();
p.method(); // child 출력
p.method2(); // 컴파일 에러 발생
}
}
3. 이종모음 (Heterogeneous Collection)
- 배열은 원래가 동종모음(Homogeneous Collection) 구조 : 같은 형식의 데이터 저장
- 다형성을 적용하면 이종모음(Heterogeneous Collection) 구조 가능
class Parent{
public void method(){ System.out.print("parent\\t");}
}
class Child1 extends Person{
@Override
public void method(){ System.out.print("child1\\t");}
}
class Child2 extends Person{
@Override
public void method(){ System.out.print("child2\\t");}
}
public class Test{
public static void main(String[] args) {
Parent [] pArr = new Person[3];
pArr[0] = new Person();
pArr[1] = new Child1();
pArr[2] = new Child2();
for(Parent p: pArr){
p.method();
}
// parent child1 child2 출력
}
}
4. Wrapper Class
- 원시 데이터 유형의 데이터를 객체로 사용할 수 있도록 구현해 놓은 클래스
- JDK 9버전부터 Wrapper 클래스의 생성자 deprecated 됨. → 래퍼클래스의 valueOf() 메서드 이용
| Primitive Data Type | Wrapper Class |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
| char | Character |
5. 오토박싱(autoboxing)과 오토 언박싱(autounboxing)
- 오토박싱 : 기본형(primitive) → Wrapper 객체로 자동 변환해주는 기능
- 오토 언박싱 : Wrapper 객체 → 기본형으로 자동 변환해주는 기능
- Java SE 5 이상
int a = 10;
Integer b = a; // 오토박싱 : Integer.valueOf(a);와 같음.
Integer x = 20;
int y= x; // 오토언박싱
6. 다형적 인자
- 메서드에 전달되는 인자가 여러 가지 타입으로 제공될 수 있는 것
class Parent{ ... }
class Child1 extends Parent{ ... }
class Child2 extends Parent{ ... }
public class Test{
public static void printInfo(Person p){
p.method();
}
public static void main(String[] args) {
Parent p = new Parent();
Child1 c1 = new Child1();
Child1 c2 = new Child2();
printInfo(p);
printInfo(c1);
printInfo(c2);
}
}
7. instanceof 키워드
obj instanceof ClassName
- 객체가 특정 클래스의 인스턴스인지 확인할 때 사용하는 연산자
- 왼쪽 항의 obj가 오른쪽 항의 클래스의 인스턴스이면 true 반환.
'언어 > Java' 카테고리의 다른 글
| [Java] 객체지향 프로그래밍 - final, abstract (0) | 2026.02.27 |
|---|---|
| [Java] 객체지향 프로그래밍 - static 구문, 초기화블록, 싱글톤 디자인 패턴 (0) | 2026.02.27 |
| [Java] 객체지향프로그래밍 - 캡슐화, 상속, 접근제한자 (0) | 2026.02.27 |
| [Java] 패키지(package) - import 구문 (0) | 2026.02.26 |
| [Java] 제네릭(Generic) 문법과 타입 추론(var 변수) 개념 정리 (0) | 2026.02.26 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자