개발로드

☆KDT 2024-01-26★인터페이스 본문

JAVA

☆KDT 2024-01-26★인터페이스

위대한개발자 2024. 1. 26. 21:31
☆인터페이스(interface)★
추상 클래스의 특수한 형태

 

 인터페이스
모든 필드가 public static final(상수)로 정의, public static final 생략시 컴파일러가 자동으로 추가
모든 메소드는 public abstract로 정의(추상 메소드), public abstract 생략시 컴파일러가 자동으로 추가
정적 메소드(static method) : 클래스 내부에 정적 메소드 메소드 사용방법과 동일
- 객체 생성 없이 클래스 이름으로 바로 접근 가능 => 클래스명.메소드명()
객체 생성이 불가능 => 미완성(추상)메소드를 가지고 있어서
인터페이스 = 역할 ex) interface Tire는 Tire의 역할을 표현한다. 구른다run(), 펑크 이런것들
디폴트 메소드는 public로 정의
필요에 의해 추후 메소드를 추가하는 경우 추상 메소드를 추가하면 그동안 구현했던 모든 클래스에 오류 발생
오류를 없애는 방법은 완성 메소드인 default 리턴타입 메소드명(){}을 만들어 사용
오버라이딩이 가능
다만 완성된 메소드이기 때문에 구현 클래스에서 반드시 오버라이딩 할 필요는 없음
부모인터페이스이름.super.디폴트메소드 이름
ex) public dafault void run(){...}//자바 1.8부터 추가
     public static void speed(){}//자바 1.8부터 추가

 ☆ 인터페이스의 상속
상속(구현)시 implements 사용(클래스의 상속은 extends 사용)
다중 상속 가능(클래스는 다중 상속이 불가능 - 모호성이 발생하기 때문에) => ex) 메소드
-이유: 메소드는 미완성이므로 자식이 만들어 쓰기에 문제 없음, 필드는 public static final로 강제되기 때문에 사용할때 
 클래스명.필드명 형식을 사용하므로 문제 되지 않음

자식 클래스 extends 부모 클래스
자식 클래스 implements 부모 인터페이스
자식 인터페이스 extends 부모 인터페이스
※implements = : 상속받아서 완전히 구현(완성)시킨다.
※extends = 부모의 것을 상속받는다.
※따라서 interface끼리는 extends를 사용한다. why? interface는 미완성 클래스이기 때문에. 완성 불가능.

★ 인터페이스의 모든 메소드를 구현할 때는 public만 사용 가능