본문 바로가기
프로그래밍/JAVA

자바의 정석 기초 ( 인터페이스 / 인터페이스 추상클래스 공통점 & 차이점 )

by ✲ 2020. 7. 15.
반응형

남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다. 

인터페이스 (interface) 

- 추상메서드의 집합

- 구현된 것이 전혀없는 설계도. 껍데기 (모든 멤버가 public) 

interface 인터페이스이름 { 

    public static final 타입 상수이름 = 값;          // 상수라서 final 붙음. 인터페이스는 변수 X , IV X, CV X 

    public abstract 메서드이름 (매개변수목록);    // 모든 멤버가 public 

 

인터페이스 상속

- 인터페이스의 조상은 인터페이스만 가능 (Object가 최고 조상 X ) 

- 다중 상속이 가능 (추상메서드는 충돌해도 문제 없음 ) / 자바는 단일 상속만 가능 

interface Fightable extends Movable, Attackable{}

interface Movable {
    void move (int x, int y) ; 
}
interface Attackable {
    void attack (Unit u);
}

 

인터페이스의 구현 

- 인터페이스에 정의된 추상 메서드를 완성하는 것 

class 클래스이름 implements 인터페이스이름 { 

    // 인터페이스에 정의된 추상메서드를 모두 구현해야 한다. 

class Fightable {
    void move(int x, int y); // public abstract 생략된것! 
    void attack (Unit u);
}
class Fighter implements Fightable { 
    public void move (int x, int y) { 내용 입력 } 
    public void attack (Unit u) { 내용 입력  } 
}
→ Fighter클래스는 Fightable 인터페이스를 구현했다. 

abstract class Fighter implements Fightable {
    public void move(int x, int y){ 내용입력} 

일부만 구현하는 경우 , 클래스 앞에 abstract를 붙여야 함 

 

요약! 

* 인터페이스란 ? 
추상메서드의 집합 / 상수 + static 메서드 + 디폴트 메서드 추가 (JDK 1.8 부터) 
* 인터페이스 구현이란 ? 
인터페이스 추상메서드 몸통{} 만들기 (미완성 설계도 완성하기) 

class AudioPlayer extends Player { 
    void play(int pos) {내용입력} 
    void stop(){내용입력} 
} // 추상 메서드 구현

class Fighter implements Fightable {
    public void move(int x, int y) { 내용 입력 } 
    public void attack (Unit u) { 내용 입력 } 
} // 인터페이스 구현 


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

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

반응형

댓글