728x90
반응형

다형성(polymorphism)

- 객체들의 타입이 다르면 똑같은 메시지가 전될되더라도 서로 다른 동작을 하는 것

- 강아지의 speak()메서드에서는 "멍멍"이라고 동작하고, 고양이의 speak()메서드에서는 "야옹"이라고 동작하도록 구현하는 것


상향 형번환(UP-Casting)

- 부모타입의 참조변수로 자식타입의 객체를 다룰 수 있는 것

- 서로 상속관계에 있는 타입간의 형변환만 가능하다.

- 자식 타입에서 부모타입으로 형변환하는 경우에는 형변환 생략가능하다.


상향 형변환이 가능한 이유

- 자식클래스 객체는 부모클래스 객체를 포함하고 있기 때문이다.



<형변환 사용하는 이유>



<형변환 사용한 경우>






객체의 타입을 알아내는 방법

  Shape s=getShape();     //참조변수 s가 가리키는 객체의 실제 타입은? Shape일수도 있지만 Rectangle일수도 있고 Circle일수도 있다.

   if ( s instanceof Rectangle ) {

        System.out.println("Rectangle이 생성되었습니다.");

   }

  else {

        System.out.println("Rectangle이 아닌 다른 객체가 생성되었습니다.");

  }





다형성의 이용

  메서드의 매개변수로 부모클래스의 참조변수를 이용한다.

  -> 다형성을 이용하는 전형적인 방법

 




제어자 조합할 때 주의사항

메서드에 static과 abstract를 함께 사용할 수 없다.

-> static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다.

클래스에 abstract와 final을 동시에 사용할 수 없다.

-> 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.

abstract메서드의 접근제어자가 private일 수 없다.

-> abstract메서드는 자손클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손 클래스에서 접근할 수 없기 때문이다.

메서드에 private와 final을 같이 사용할 필요는 없다.

-> 접근 제어자가 final인 메서드는 오버라이딩될 수 없기 때문이다.

728x90
반응형

+ Recent posts