7-35~37 인터페이스의 선언, 상속, 구현
인터페이스(Interface)
- 추상 메서드의 집합
- 구현된 것이 전혀 없는 설계도. 껍데기(모든 멤버가 public)
interface 인터페이스 이름 {
public static final 타입 상수이름 = 값; // 상수. iv, cv 는 불가능
public abstract 메서드이름(매개변수목록); // 추상 메서드
}
예제 - public, abstract, static, final 생략 가능. 안 써도 항상 public, 상수, 추상 메서드 이므로!
interface PlayingCard {
public static final int SPADE = 4;
final int DIAMOND = 3; // public static final int DIAMOND = 3;
static int HEART = 2; // public static final int HEART = 2;
int CLOVER = 1; // public static final int CLOVER = 1;
public abstract String getCardNumber();
String getCardKind(); // public abstract String getCardKind();
}
인터페이스의 상속
- 인터페이스의 조상은 인터페이스만 가능 (Object가 최고 조상 아님)
- 다중 상속이 가능 (∵ 추상 메서드는 충돌해도 문제 없음)
(상속에서 메서드 충돌문제 - 선언부가 똑같은데 구현부가 다른 것이 문제였음. 어느쪽을 상속받을지 결정할 수 없음)
// 구현부가 비었지만 상속 했으므로 멤버가 2개
interface Fightable extends Movable, Attackable { }
interface Movable{ void move(int x, int y); }
interface Attackable { void attack(Unit u); }
인터페이스의 구현
- 인터페이스에 정의된 추상 메서드를 완성하는 것
(implements를 사용한다는 것만 다르지, 추상 클래스 완성과 동일하다!)
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에 정의된 추상메서드를 모두 구현해야 한다.
}
예제
interface Fightable {
void move(int x, int y);
void attack(Unit u);
}
// Fighter 클래스는 Fightable 인터페이스를 구현했다.
class Fighter implements Fightable {
public void move(int x, int y) { /* 내용 생략 */ }
public void attack(Unit u) { /* 내용 생략 */ }
}
- 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야 함.
abstract class Fighter implements Fightable {
public void move(int x, int y) { /* 내용 생략 */ }
//public abstract void attack(Unit u) // 보이지 않지만 상속의 결과로 생략되어 있는 것
}
Q & A
Q. 인터페이스란?
- 핵심은 추상 메서드의 집합이라는 것이다. (상수 등 나머지는 부수적인 것)
Q. 인터페이스의 구현이란?
- 인터페이스의 추상 메서드 몸통 {} 만들기(미완성 설계도 완성하기)
Q. 추상 클래스와 인터페이스의 공통점은?
- 추상 메서드를 가지고 있다.(미완성 설계도)
Q. 추상 클래스와 인터페이스의 차이점은?
- 인터페이스는 iv, im, 생성자를 가질 수 없다.
Author And Source
이 문제에 관하여(7-35~37 인터페이스의 선언, 상속, 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@oyeon/7-3537-인터페이스의-선언-상속-구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)