[Java] 자바 #25, 인터페이스(Interface)
- 프로그래밍 언어/Java
- 2019. 2. 23. 18:56
인터페이스, interface
- 자바의 구성요소.
- 클래스의 일종(자료형)
- 추상클래스와 유사.
- 추상메소드의 집합.
- 상속관계에서 부모역할.
- 구현멤버는 가질 수 없다.
일반클래스 => 변수 + 메소드
추상클래스 => 변수 + 메소드 + 추상메소드
인터페이스 => 추상메소드
ex)
class 일반클래스명{
변수
메소드
}
class 추상클래스명{
구현멤버
변수
메소드
추상멤버
추상메소드();
}
interface 인터페이스명{
추상멤버
추상메소드();
}
상속
일반클래스 > 일반클래스 : extends
일반클래스 > 추상클래스 : extends
일반클래스 가 인터페이스 를 (구현) : implements
인터페이스 구현 예제
//스피커 인터페이스 선언.
interface Speaker{
//구현된 멤버 불가능
//추상메소드
public abstract void aaa();
abstract void bbb(); //public 접근제한자만 가진다.
void ccc(); //어차피 추상메소드만 가지므로 abstract를 생략가능하다.
}
//구현 클래스(스피커 기종 Boss1000인 것 구현)
class Boss1000 implements Speaker{
@Override
public void aaa() {
}
@Override
public void bbb() {
}
@Override
public void ccc() {
}
}
상속
- 상속의 구성원이 될 수 있는 요소
일반클래스, 추상클래스, 인터페이스 간의 상속관계
1. 일반 클래스(자식) , 일반클래스(부모) O
2. 일반클래스(자식) , 추상클래스(부모) O
3. 일반클래스(자식) , 인터페이스(부모) O
4. 추상클래스(자식) , 일반클래스(부모) O -> 쓰지마세요 문법은 지원될지 몰라도 이치가 맞지 않다.
5. 인터페이스(자식) , 일반클래스(부모) X 이유 : 일반클래스의 구현된 멤버를 인터페이스가 상속받을 수 없기 때문에~(쉽게 생각)
6. 추상클래스(자식) , 인터페이스(부모) O
7. 추상클래스(자식) , 추상클래스(부모) O
8. 인터페이스(자식) , 추상클래스(부모) X -> 5번이랑 이유가 같음.
9. 인터페이스(자식) , 인터페이스(부모) O
10. 일반클래스(자식)->일반클래스 -> 추상클래스 -> 추상클래스 -> 인터페이스 -> 인터페이스 -> 인터페이스 //패턴 최상위 계층은 인터페이스
다중상속
- 자바는 클래스상속에서 다중상속은 허용하지 않는다.
- 인터페이스에 한해서는 다중상속을 허용한다.(*******************)
ex)
- 인터페이스
interface 사람{
void 숨쉰다();
}
interface 남자 extends 사람{
void 군대간다();
}
interface 여자 extends 사람{
void 화장한다();
}
interface 부장 extends 사람,직원{
void 결재한다();
}
interface 직원 extends 사람{
void 일한다();
}
interface 엄마 extends 여자{
void 밥한다();
}
interface 아빠 extends 남자{
void 빨래한다();
}
- 구현 클래스
class 홍길동 implements 남자,직원,아빠{
@Override
public void 숨쉰다() { }
@Override
public void 빨래한다() { }
@Override
public void 일한다() { }
@Override
public void 군대간다() { }
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 #27, 제네릭(Generic) (2) | 2019.02.24 |
---|---|
[Java] 자바 #26, 열거형(Enumeration, enum) (0) | 2019.02.24 |
[Java] 자바 #24, 업캐스팅과 다운캐스팅(Casting) (0) | 2019.02.21 |
[Java]자바 #23 final 키워드(클래스, 메소드) (0) | 2019.02.20 |
[Java] 자바 #22, 추상클래스(Abstract), 오버라이딩(Overriding) (0) | 2019.02.19 |