다형성(Polymorphism)

  • 객체 지향 프로그래밍의 중요 특징
    • 추상화(일반화), 구체화
    • 추상성이 높은 수준에서 구조를 단순화 할 수 있음 상속, 인터페이스 등 이런걸로 다형성을 표현한다.

추상 클래스⭐️

public abstract class class-name

  • new 연산으로 인스턴스 생성 불가
  • 오직 파생 클래스를 위해 존재하는 클래스
  • 설계적인 관점에서 존재
  • 추상 메서드를 가지는 것인 일반적
    • abstract void getA()
    • 선언만 있고 정의가 없음
    • 파생 형식에서 반드시 재정의 해야 함
  • 개인적으로 인터페이스있는데 이거 왜있는지 모르겠음…
  • 추상 클래스가 추상 메서드 가진다.
  • 클래스긴 하므로 필드를 가질 수 있다.
  • 일반 메서드도 가질 수 있다.
  • 진짜 껍데기만 남기면 되면 인터페이스를 쓰면 된다!!!

인터페이스⭐️

  • 필드를 가지지 않는 추상 클래스를 선언하는 것으로 이해가 가능하다. (단, 상수 필드는 가질 수 있음)
  • 인터페이스의 파생은 implements
  • 인터페이스는 메서드 원형을 기술하기 위한것으로 구체적 적의가 없는 순수한 '선언'에 해당
    • 심볼릭 상수 정의 상수 변수 정의는 된다.
    • C의 헤더 파일과 유사한 의미
    • 다중 상속 가능(클래스가 아니라 허용해주는감?)
  • 인터페이스에 메서드 정의하면 abstract 가 자동으로 붙는다 생각하면된다.

열거형

public enum enum-name{value#0, value#n}

  • 심볼릭 상수를 정의할 수 있는 문법으로 형안정성을 제공하고 가독성 좋은 코드 만들 수 있다.
  • java.lang,Enum의 파생 클래스
  • 주요 멤버
    • values(), valueOf(String name)
    • name()
    • ordinal()
    • toString()