TIL 13일차. 다형성

김기현·2025년 2월 26일

1)다형성(Polymorphism)

다형성이란?

상속을 이용한 기술로 부모클래스 타입의 참조변수 하나로 상속관계에 있는 여러 타입의
자식 객체를 참조할 수 있게하는 기술이다.

업 캐스팅(Up Casting)

상속 관계에 있는 부모, 자식 클래스 간에 부모타입의 참조형 변수가 모든 자식 타입 객체의
주소를 참조할 수 있다

다운 캐스팅(Down Casting)

자식 객체의 주소를 받은 부모참조형 변수를 가지고 자식의 멤버를 참조해야 할 경우(업캐스팅을 했을 경우), 부모 클래스 타입의 참조형 변수를 자식 클래스 타입으로 형변환 하는것이며 자동으로 처리되지 않기 때문에 반드시 자식 타입을 명시해야한다.
ex) Car c =new Sonata();
((Sonata)c).moveSonata();

객체배열과 다형성

객체배열이 같은 객체 참조 자료형의 변수를 묶는것으로 사용하는 것이라면
다형성을 이용하면 객체배열을 부모 타입 참조 자료형의 변수를 묶게 할 수 있다

매개변수와 다형성

다형성을 이용하여 메소드 호출 시 부모타입의 변수 하나를 통해 자식타입의 객체를 받을 수 있다

  • a instanceof b : a와 b가 상속관계이거나 본인인지 확인하는 연산자

다형성에 대한 간단 정리

상속관계에 있을 경우 부모타입 자료형으로 묶는다는 가정하에 안쪽에 자식의 변수, 클래스 등의 것을 넣어도 성립한다

바인딩

실제 실행할 메서드 코드와 호출하는 코드를 연결 시키는 것이다
정적 바인딩 : 프로그램이 실행되기 전 컴파일 단계에서 메서드와 메서드의 호출부를 연결

동적 바인딩 : 컴파일 시 정적 바인딩된 메서드를 실행할 당시의 객체 타입을 기준으로 바인딩 되는 것이다

2)추상 (Abstract)

추상 클래스 : 몸체({}) 없는 메서드를 포함한 클래스

추상 메서드 : 추상 메서드 선언부에 Abstract를 사용하며 오버라이딩이 강제된다

추상클래스 특징
-미완성 클래스이기 때문에 자체적으로 객체생서이 불가하여 상속해서 객체 생성해야한다
-abstract 메서드가 포함된 클래스는 반드시 abstrack 클래스여야만 한다
-abstract 매서드가 없어도 abstract클래스는 선언이 가능하다
-abstract 메서드 안에도 일반변수, 메서드 포함이 가능하다
-객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능하다
-상속 받은 자식에게 공통된 멤버 제공이 가능하다

3)인터페이스(Interface)

인터페이스란?

클래스가 공통적으로 가져야하는 상수형 필드와 추상 메서드만을 모아두고 작성할 수 있는 추상 클래스의 변형체다.

인터페이스 작성법

[접근제한자] interface 인터페이스명{
public static final 자료형 변수명 = 초기값;

[public abstract] 반환자료형 메소드명([자료형 매개변수]);
}

인터페이스의 특징

모든 인터페이스의 메서드는 묵시적으로 public abstract 이다
변수는 묵시적으로 public static final
객체 생성은 안되나 참조형 변수로는 가능하다(다형성)
인터페이스 구현 객체에 공통된 기능 구현을 강제화할 수 있다 // 공동작업이 수월하다
상속 받은 클래스를 자식객체로 참조할 수 있다

인터페이스의 상속

(부)클래스 - (자)클래스 : extends 사용
(부)인터페이스 - (자)인터페이스 : extends 사용
(부)인터페이스 - (자)클래스 : implements 사용
(부)클래스 - (자)인터페이스 :상속불가

*A instanceof B : A가 B클래스에 있거나 상속하고 있는지에 대한 true false

profile
모든게 처음

0개의 댓글