자바의 정석 - 인터페이스의 선언, 상속, 구현

송용준·2023년 3월 10일

인터페이스(interface)

  • 추상 메서드의 집합
  • 구현된 것이 전혀 없는 설계도. 껍데기(모든 멤버가 public)
  • 추상클래스,인터페이스 차이 --> 추상클래스 : 생성자 + iv + 일반클래스 + 추상메서드 / 인터페이스 : 추상메서드 + 상수, 구현된게 아무것도 없음
interface 인터페이스 이름 {
	public static final 타입상수이름 = 값;	// 상수
    public abstract 메서드이름;
}

모든 인터페이스 멤버는 public,static,final이어야함(생략가능), 몸통이 없음

인터페이스의 상속

  • 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상 아님)
  • 다중 상속이 가능 (추상메서드끼리는 충돌해도 문제 없음, 구현부가 없어서)

인터페이스의 구현(완성시킴, 몸통 완성시키기)

  • 인터페이스에 정의된 추상 메서드를 완성하는 것
class 클래스 이름 implements 인터페이스 이름 {
	// 인터페이스에 정의된 추상메서드를 모두 구현해야 한다.
}

implements : 구현

  • 일부만 구현할꺼면 클래스 앞에 abstract 붙여야함

Q1. 인터페이스란?
A1. 추상메서드의 집합(핵심) + 그 외(상수, static, 디폴트메서드, 핵심은 아님)

Q2. 인터페이스의 구현이란?
A2. 인터페이스 추상메서드 몸통({ }) 만들기

Q3. 추상클래스와 인터페이스의 공통점?
A3. 추상메서드(미완성 메서드)를 가지고 있다.

Q4. 추상클래스와 인터페이스의 차이점?
A4. 인터페이스는 iv를 가질 수 없다.

abstract class Player { 			// 추상 클래스(iv,생성자,추상 메서드,인스턴스 메서드를 가짐)
	boolean pause;					// iv
    int currentPos;		
	
    Player() {						// 생성자
    	pause = false;
        currentPos = 0;
    }
    
    abstract void play(int pos);	// 추상메서드
    abstract void stop();
    
    void play() {					// 인스턴스메서드
    	play(currentPos);
    }
}

interface Fightable {				// 인터페이스(구현x, 추상메서드만)
	void move(int x, int y);
    void attack(Unit u);
}

profile
용용

0개의 댓글