티스토리 뷰
-추상메서드의 집합 (프로그래밍 관점)
-구현된 것이 전혀없는 설계도,껍데기(모든 멤버가 public)
항상 public static final , public abstract이기때문에 생략가능
interface 인터페이스명{
public static final 타입 상수명=값;
public abstract 메서드명(매개변수목록);
}
추상클래스와 인터페이스의 공통점은?
-(abstract method)추상메서드를 가지고있다(미완성 설계도)
추상클래스와 인터페이스의 차이점은?
-인터페이스는 (iv,생성자,인스턴스메서드)를 가질 수없다.
인터페이스의 상속
-인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상 아님)
-다중 상속이 가능(추상메서드는 충돌해도 문제없음)
interface Fightable extends Movable,Attackable {] //다중상속가능 인터페이스 Fightable 상속받아
//사용할수있는 멤버는 2개
interface Movable {
void move(int x, int y);
}
interface Attackable {
void Attack(Unit u);
}
인터페이스의 구현
-인터페이스에 정의된 추상메서드를 완성하는것
-일부만 구현하는 경우 , 클래스 앞에 abstract를 붙여야 함.
class 클래스명 implements 인터페이스명 {
//인터페이스에 정의된 추상메서드를 모두 구현해야한다.
}
인터페이스의 다형성
-인터페이스도 구현 클래스의 부모 가능!
-인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능
-인터페이스를 메서드의 리턴타입으로 지정가능
class Shark extends MarineLife implements Attackable{
public void move(int x, int y){//내용생략}
public vod attack(Attackable a) {//내용생략}
}
MarineLife l= new Shark();
Attackable a= new Shark();
l.move(100,200);
a.attack(new Shark());
interface Attackable {
void attack(Attackable a); // Attackable 인터페이스를 구현한 클랫의 인스턴스만 가능
}
class Shark extends MarineLife implements Attackable {
public void move(int x, int y){//내용생략}
public void attack(Attackable a) {//내용생략}
}
Attackable method() {
Shark s= new Shark();
return s;
}
Attackable a= method(); == Attackable a= new Shark();
인터페이스의 장점

-두 대상(객체) 간의 '연결, 대화,소통'을 돕는 중간역할
-개발 시간을 단축
-표준화가 가능하다.(ex>JDBC)

-서로 관계없는 클래스들을 관계를 맺어줄 수 있다.
-인터페이스 덕분에 B가 변경되어도 A는 안 바꿀 수 있게 된다. (느슨한 결합)

(default) 메서드 와 static 메서드
-인터페이스에 디폴트메서드, static메서드 추가가능(JDK1.8부터)
-인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움.
해결책=> 디폴트 메서드(default method)-> 인스턴스 메서드(인터페이스 원칙위반)
예외

해결책
여러 인터페이스의 디폴트 메서드간의 충돌
-인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다.
디폴트메서드와 조상클래스의 메서드간의 충돌
-조상 클래스의 메서드가 상속되고,디폴트 메서드는 무시됨.
참고문헌 :남궁성, 『자바의정석』, 도우출판
'TIL > JAVA' 카테고리의 다른 글
| Collections Framework(컬렉션 프레임웍) (0) | 2023.01.16 |
|---|---|
| java.lang패키지와 유용한 클래스 (0) | 2023.01.15 |
| 예외처리(Exception) (0) | 2023.01.11 |
| 객체지향(OOP)추상클래스(abstract class) (0) | 2023.01.11 |
| 객체지향(OOP)제어자 (0) | 2023.01.11 |
- Total
- Today
- Yesterday
- git 개념 #spring전 git #간단한 개념만
- 내일배움카드
- application.yml 설정
- 빌드 오류 #java버전오류
- MegabyteSchool
- spring #springboot #스프링부트공부 #스프링부트실습 #메타코딩유튜브
- 개발자취업부트캠프
- 자료구조 #CS공부
- 패스트캠퍼스
- HTTP #메타코딩
- JSON #json #개발자필수지식
- 자료구조
- Spring Boot 공부
- 스프링 # 스프링부트 #서버와클라이언트 # 공부기록
- 알고리즘 복잡도 #알고리즘 공부 #이것이코딩테스트다 #이코테 #나동빈
- JSON
- 국비지원교육
- 국비지원
- 메가바이트스쿨
- mysql #인텔리제이랑 연결 #다시설치 및 재실행
- JSON에 대해서 알아보기
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |