반응형

다형성(polymorphism)  : 여러 가지 형태를 가질 수 있는 능력

  • 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
  • 같은 코드에서 여러 다른 실행 결과가 나옴
  • 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
  • 다형성을 잘 활용하면 유연하고, 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있음

이전까지 인스턴스 타입과 일치하는 타입의 참조변수만을 사용해왔지만

만약 두 클래스가 상속관계라면 다형성을 적용할 수 있다. 즉, 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것도 가능하다.

package ch06;

 

public class Animal {

 

public void makeSound() {

System.out.println("동물이 소리를 내고 있습니다.");

}

 

 

}

package ch06;

 

public class Brid extends Animal{

 

@Override

public void makeSound() {

System.out.println("새가 지저귀고 있습니다.");

}

 

public void fly() {

System.out.println("새가 날아갑니다.");

}

 

}


Bird b = new Brid ( ) ;   // 참조 변수와 인스턴스의 타입이 일치
Animal a = new Brid ( ); // 조상 타입(Animal) 참조 변수로 자손타입(Bird) 인스턴스 참조

Animal 타입의 참조변수로는 Bird 인스턴스 중에서 Animal 클래스의 멤버들(상속받은 멤버포함)만 사용할 수 있다.

따라서 생성된 Bird 인스턴스 멤버 중에서 Animal 클래스에 정의되지 않은 멤버 fly( )은 참조변수 a로 사용이 불가능하다.

즉, a.fly( )와 같이 할 수 없다는 것이다.

둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다.


반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수 있을까?

정답은 불가능하다 이다.

실제 인스턴스인 Animal의 멤버 개수보다 참조변수 b가 사용할 수 있는 멤버 개수가 더 많기 때문이다.

  • 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 없다!
  • 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다
반응형

'Java > Java 이론' 카테고리의 다른 글

[JAVA] String 클래스  (0) 2023.08.10
[JAVA] 추상 클래스와 메서드  (0) 2023.08.10
[JAVA] 객체지향 언어  (0) 2023.08.09
[JAVA] switch 문  (0) 2023.08.09
[JAVA] 상속 (2)  (0) 2023.08.08

+ Recent posts