아줌마의 국비학원생활

[13일차] 다형성, 인터페이스

citygray 2023. 5. 3. 15:01
  • ScoreOX 예제 안 풀었음

다형성

  • 조상타입 참조변수로 자손타입 객체를 다루는 것
Tv t = new SmartTv();
//조상타입    //자손타입

참조변수의 형변환

  • 리모컨 바꾸기 : 사용할 수 있는 멤버의 갯수 조절
  • 조상 자손 관계의 참조 변수는 서로 형변환 가능
  • 조상타입의 참조변수로 자손타입의 인스턴스를 참조 할 수 있지만,
    반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.(리모컨의 버튼 갯수가 부족해진다.)

instanceof

  • 참조변수가 참조하는 인스턴스의 타입을 검사하는 연산자
참조변수 instanceof 클래스명

인터페이스

  • 추상 메서드의 집합
  • 구현된 것이 전혀 없는 설계도, 껍데기
  • 여러 프로그램에서 사용할 멤버(필드, 메서드)를 일관되게 하기 위한 기술 명세

인터페이스 작성

  • 'class' 대신 'interface'를 사용한다는 것 외에 클래스 작성과 동일하다.
interface 인터페이스이름{
    public static final 타입 상수이름 = 값;
    public abstract 메서드이름 (매개변수 목록);
}
  • 하지만 구성요소(멤버)는 추상 메서드와 상수만 가능하다.
    • 모든 멤버변수는 public static final 이여야한며, 이를 생략할 수 있다.
    • 모든 메서드는 public abstract 이여야하고, 이를 생략 할 수 있다.

인터페이스 구현

  • 인터페이스에 정의된 추상 메서드를 완성하는 것
class 클래스이름 implements 인터페이스이름{
      //인터페이스에 정의된 추상메서드를 구현,오버라이딩 한다.
}
  • 일부만 구현하는 경우, 클래스 앞에 abstract 붙여야함
abstract class Fighter implements Fightable{
    public void move(int x, int y){/*구현*/}
}
  • 상속과 구현이 동시에 가능하다
  • class Fighter extends Unit implement Fightable{ public void move(int x, int y){ //구현 }; public void attack(Unit u){ //구현 }; }

인터페이스의 상속

  • 인터페이스의 조상은 인터페이스만 가능(Object 최고 조상 아님)
  • 다중 상속 가능(추상메서드는 충돌해도 문제없음) <--> 클래스는 단일상속
  • 기존 인터페이스에 추상메서드를 추가하고 싶을때 기존인터페이스를 상속받는 새 인터페이스를 작성

인터페이스와 추상메서드

  • 공통점 : 추상메서드를 가지고 있다(미완성 설계도)
  • 차이점 : 인터페이스는 iv를 가질 수 없다.

인터페이스를 이용한 다형성

  • 다형성 : 조상타입 참조변수로 자손타입 객체를 다루는 것
  • Tv t = new SmartTv(); //조상타입 //자손타입
  • 인터페이스 다형성 : 인터페이스타입 참조 변수로 자손타입 객체를 다루는 것
  • 인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능
  • interface Fightable{ void move(int x, inty); void attack(Fightable f); }
  • 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.자바 버전에 따른 인스턴스에 대한 변화
  • Fightable method(){ Fighter f = new Fighter(); return f; }
  • Java7 까지
    • 인터페이스는 상수와 추상메서드로만 구성
  • Java8 부터
    • 상수와 추상메서드 포함
    • default 메서드 포함(Java 8)
    • private 메서드 포함(Java 9)
    • static 메서드 포함(Java 8)
  • 여전히 인터페이스에는 인스턴스변수 선언 불가