2 minute read

7.5 (다형성)

5. 다형성

  • 여러 가지 형태를 가질 수 있는 능력
  • 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다향성을 구현 → 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조

      Class Tv {}
      Class CaptionTv extends Tv {}
        
      Tv t = new CaptionTv();
        
      // t는 CaptionTV가 Tv로부터 상속받은 멤버(Tv의 멤버만) 사용가능
      // 역으로 자손타입의 참조변수로 조상인스턴스 참조하는것은 불가
      // -> 자손이 가진 멤버를 조상인스턴스에서 참조하려고 하기 때문,
      // 참조변수가 사용할 수 있는 멤버 개수 <= 참조하려는 인스턴스의 멤버 개수
    
  • 참조변수의 타입변환
    • Up-casting
      • 자손타입 → 조상타입
      • 타입변환 생략 가능
    • Down-casting
      • 조상타입 → 자손타입
      • 타입변환 생략 불가
    • 상속관계가 아닌 클래스간 형변환 불가
  • instanceof 연산자
    • 참조변수가 참조하는 인스턴스의 실제 타입을 알아보기 위해 사용
    • 사용법: 참조변수 instanceof 타입
    • boolean 리턴
    • 자손은 조상을 포함하고 있기 때문에 자손 instanceof 조상 은 true 리턴
    • instanceof로 true인 값으로 타입변환 가능
    • 참조변수가 null일때 false 반환
  • 파라미터의 다형성
    • 클래스들의 동일한 필드를 상속 구조로 바꿈으로써 하나의 함수로 여러 클래스의 연산을 할 수 있다.

        class Product {
        	int price
        }
              
        class Tv extends Product{}
        class Computer extends Product{}
              
        Tv tv = new Tv();
        Computer computer = new computer();
        int buy(int balance, Product product) {
        	return banacle - moeny
        };
        buy(tv);
        buy(computer)
      
    • 파라미터의 타입을 Object로 선언하면 모든 클래스의 연산을 할 수 있다

Leave a comment