자바 6-2주차. 다형성

다형성 (Polymorphism)

업캐스팅 = 자동 타입변환

  • 부모 타입의 참조 타입에다가 자식 타입의 참조 변수(실제 객체)를 가져다 붙이는것.

  • 실제 객체는 자식이더라도, 타입이 부모로 선언되어 있어서 부모에서 정의된 기능만 사용가능

  • 자식 클래스에서 부모의 특정 메소드 func() 를 오버라이딩해서 재정의한다면, 자식에서 오버라이딩된 func() 함수가 실행된다.

=> c++ 에서 가상함수가 동작하는 방식과 동일. 오버라이딩만 하면 자바에서는 가상 함수처럼 작동한다.

  • 바인딩 : 어떤 대상을 가지고 사용을할때ㅏ
    • 정적 바이딩 / 동적 바인딩
shape s = new Rect();  // shape : 부모 클래스 ,  Rect : 자식 클래스 

다운 캐스팅

  • 업캐스팅 이후, 다시 자식 타입으로 변환할떄
  • 업캐스팅때 사용하지 못하던 자식의 멤버들을 사용할 수 있게된다.
  • 주의사항 : 먼저 자식 타입인지 확인후 강제 타입 실행할것 => instance of 사용!
boolean result = 객체 instance of 타입

추상 클래스 (abstract class)

  • 추상 메소드 : 함수 선언은 되어 있지만 정의는 되어있지 않은함수

  • 추상 클래스 : 클래스 안에 메소드를 선언을 하는데, 정의 내용이 없는 메소드(추상 메소드)를 가지는 클래스

  • 상속을 받아간 자식 클래스에서 오버라이딩해서 내용을 정의한다.

  • 추상 클래스를 상속받았는데 무조건 정의를 하거나, 또는 정의를 안한다면 그 자식 클래스 또한 추상 클래스로 만들어야 한다.

=> 추상 클래스의 2종류
1. 추상 메소드를 하나라도 가진 클래스
2. 추상 메소드가 하나도 없지만 abstract로 선언된 클래스

  • 추상 클래스는 객체 생성 불가능. 단순히 다형성을 위한 기능이다.

  • 추상 클래스를 상속받아, 추상 메소드를 구현하지 않으면 추상 클래스가 된다.

public abstrat class Animal{
  public abstract void sound();
}

public class Dog extends Animal{
  @Override
  public void sound(){
    System.out.println("멍멍");
  }
}

좋은 웹페이지 즐겨찾기