-
추상클래스, 인터페이스와 다형성백엔드/자바 2020. 8. 7. 04:27
다형성이란?
일반 클래스의 상속 관계처럼 다형성이란 '다형성이란 여러 형태를 가질 수 있는 성질'을 말한다.
일반 클래스들의 상속 과정의 다형성의 포인트는 다음과 같았다.
◎ "상속 관계에서 부모 클래스가 자식 클래스들을 대표 한다"
부모 클래스를 자료 타입으로 하는 참조 변수가 자손 클래스의 인스턴스를 가질 수 있다는 것이다.
추상 클래스, 인터페이스와 다형성
일반 클래스 상속과 다형성의 관계와 같이 추상클래스, 인터페이스도 그와 동일한 구조를 갖는다.
즉 추상클래스, 인터페이스를 상속한 자손 클래스의 인스턴스의 주소값을 추상클래스, 인터페이스를 자료형으로 하는 참조 변수가 참조할 수 있다는 것이다.
interface Human{ // 인터페이스 'Human' 선언 String me(); // 반환값이 String인 추상 메서드 'me'선언. } //////////////////////////////////////////////////////////// class David implements Human{ //인터페이스 'Human'을 구현한 David 클래스 public String me() { // 추상 메서드 'me' 오버라이딩 return "나는 데이빗입니다."; } } class Winson implements Human{ //인터페이스 'Human'을 구현한 Wilson 클래스 public String me() { // 추상 메서드 'me' 오버라이딩 return "나는 윌슨입니다."; } } class Sarah implements Human{ //인터페이스 'Human'을 구현한 Sarah 클래스 public String me() { // 추상 메서드 'me' 오버라이딩 return "나는 사라입니다."; } } ///////////////////////////////////////////////////////////// class Main { public static void main(String[] args) { Human David = new David(); // 부모격인 Human 인터페이스를 참조변수로 David 클래스 인스턴스를 저장 System.out.println(David.me()); Human Wilson = new Wilson(); // 부모격인 Human 인터페이스를 참조변수로 Wilson 클래스 인스턴스를 저장 System.out.println(Wilson.me()); Human Sarah = new Sarah(); // 부모격인 Human 인터페이스를 참조변수로 Sarah 클래스 인스턴스를 저장 System.out.println(Sarah.me()); } }
코드를 보면서 이해하자.
- 'Human' 인터페이스를 선언하고 David, Wilson, Sarah 클래스가 이를 구현하고 있다.
- main 함수를 보면 'Human'을 자료형으로 하는 참조 변수가 생성된 인스턴스 객체 주소값을 저장하고 있다.
- 일반 클래스 간의 상속 관계처럼 이러한 방식을 이용해서 인터페이스를 다형성을 구현할 수 있다.
abstract class Human{ // abstract 추상 클래스 'Human' 선언 abstract String me(); // abstract 추상 메서드 'me' 선언 } ////////////////////////////////////////////////// class David extends Human{ // 추상 클래스 'Human'을 상속받은 'David' 일반 클래스 public String me() { return "나는 데이빗입니다."; } } class Wilson extends Human{ // 추상 클래스 'Human'을 상속받은 'Wilson' 일반 클래스 public String me() { return "나는 윌슨입니다."; } } class Sarah extends Human{ // 추상 클래스 'Human'을 상속받은 'Sarah' 일반 클래스 public String me() { return "나는 사라입니다."; } } ////////////////////////////////////////////////////// class Main { public static void main(String[] args) { Human David = new David(); // 'Human'을 자료형으로 갖는 참조 변수에 'David' 클래스 객체 생성 주소값을 저장 System.out.println(David.me()); Human Wilson = new Wilson(); System.out.println(Wilson.me()); Human Sarah = new Sarah(); System.out.println(Sarah.me()); } }
이는 추상 클래스도 똑같다.
- 'Human' 추상 메서드를 선언하고 David, Wilson, Sarah 클래스가 이를 상속하고 있다.
- main 함수를 보면 'Human'을 자료형으로 하는 참조 변수가 생성된 인스턴스 객체 주소값을 저장하고 있다.
- 일반 클래스 간의 상속 관계처럼 이러한 방식을 이용해서 추상클래스로 다형성을 구현할 수 있다.
'백엔드 > 자바' 카테고리의 다른 글
오류와 예외(Error, exception) (0) 2020.08.11 익명 클래스(anonymous class) (0) 2020.08.11 인터페이스 (interface) (0) 2020.08.07 추상 클래스 (abstract class) (0) 2020.08.06 추상 메서드 (abstract method) (0) 2020.08.06