다형성의 활용 (+추상abstract)

kyukim·2021년 1월 19일
0

Java 공부기록

목록 보기
17/35

객체지향의 꽃

정의:
상속관계에 있는 클래스에서 상위클래스가 동일한 메시지로 하위클래스들을 서로 다르게 동작시키는 객체지향 원리(개념) -> 오버라이딩이 그 예시.

다형성을 인자로 활용:
기본적으로 메소드에 파라미터로 기본 데이터 타입외에 배열도 올 수 있고 클래스도 올 수 있다.
상속관계에 있는 부모 클래스를 파라미터로 넣으면 자식 클래스를 어떻게 활용할 수 있을까?

예를 들어서, Animal 라는 부모와 Dog 그리고 Cat라는 상속관계의 클래스들이 있다.

Dog d = new Dog();
feed(d);
Cat c = new Cat();
feed(c);

public void feed(Animal animal) {
	animal.eat();
}

자식 클래스에 공통으로 가지고 있는 eat()을 메소드 feed()를 통해서 실행 할수 있다.
그리고 파라미터로 받은 부모 객체를 다형성인수라고 부른다.

다형성배열:

Animal[] animal = new Animal[2];
animal[0] = new Dog();
animal[1] = new Cat();

animal[0].eat();
animal[1].eat();

여기서 animal[0]과 animal[1]을 실행하면 오버라이딩된 eat()가 실행된다


추상클래스 (일부 다형성 보장)

Animal 의 eat()은 구현부가 있지만, 근데 이건 결국 절대 출력이 안될 메소드이다. 필요없는 메소드이다.
그래서 구현부분은 지우고 그냥 바디만 사용하는걸 추상메소드라한다
public abstract void eat()불완전한, 장애가 있는 메소드
왜 만들까?
재정의를 하도록, 다형성을 보장하기 위해서!

단하나의 추상메서드라도 만들면 클래스는 추상클래스가 되어져야한다
추상클래서 물론 구현코드가있는 메소드도 실행가능하다

그 추상클래스는 반드시 상속을 해야 쓸수있다 논리적으로 당연한말 구현부가 없는 추상메소드를 만들었는데 어떻게 사용? 그리고 상속받은 자식클래스는 반드시 추상메서드를 구현해야한다

profile
제 생각이 담긴 블로그입니다

관심 있을 만한 포스트

0개의 댓글