728x90
반응형
자바 인터페이스의 구성 요소
(취소선 부분 생략 가능)
상수
public static final
int X = 10;
int X;
int X = 10;은 public static final int X = 10;이 생략된 형태로 X라는 상수를 정의한 것이지만,
int X;는 변수를 선언하는 것으로 해석되기 때문에 컴파일 에러가 발생
메소드
추상 메소드 함수 몸통 부분 없음 사용하려면 반드시 함수 몸체 구현 필요 |
|
(default |
인터페이스 내에서 메소드 정의({ } 부분이 필요함, 정의 안하면 컴파일 에러) 인터페이스 상속하여 default 메소드 사용 가능 오버라이딩 가능 Interface A -> Interface B -> class C C에서 A에 있는 default 함수 호출 불가(A.super.A_Method(); 불가), 오버라이딩은 가능 |
(static |
인터페이스 내에서 메소드 정의({ } 부분이 필요함, 정의 안하면 컴파일 에러) InterfaceName.staticMethod() 형식으로 사용(객체.staticMethod 형식은 컴파일 에러) 오버라이딩 불가 |
private | 인터페이스 내에서 메소드 정의({ } 부분이 필요함, 정의 안하면 컴파일 에러) 오버라이딩 불가 |
private static (static private) |
인터페이스 내에서 메소드 정의({ } 부분이 필요함, 정의 안하면 컴파일 에러) 오버라이딩 불가 |
private 메소드는 해당 인터페이스 안에서의 사용을 위해 만들어짐(오버라이딩 불가)
static 메소드는 인터페이스 자체에서 사용됨(오버라이딩 불가)
상속에서 주로 상위 클래스 혹은 인터페이스의 레퍼런스를 만들고, 하위 클래스의 객체를 만들어 사용
실행되는 메소드는 참조 레퍼런스의 타입에 상관없이 객체의 메소드가 실행됨
오버라이딩 했지만 부모 인터페이스의 메소드를 호출하고 싶다면, '부모인터페이스이름.super.메소드이름'으로 호출 가능
단, 직접적으로 상속하는 인터페이스의 메소드만 가능(Interface A -> Interface B -> class C, C에서 A의 메소드 super로 호출 불가)
두 인터페이스 이상을 상속받는 경우
- 오버라이딩을 통해 상속받는 인터페이스들의 메소드 모두 구현 가능
- 부모 인터페이스의 default 메소드를 호출하고 싶다면, '부모인터페이스이름.super.메소드이름'으로 호출 가능
- 인터페이스에 함수 이름이 같고 형태가 다른 메소드(예를 들어 public abstract, public default)가 존재하면 필수적으로 오버라이딩 필요(그렇지 않다면 컴파일 에러)
추상 클래스와 인터페이스를 동시에 상속받는 경우
- 오버라이딩이 추상 클래스, 인터페이스의 메소드에 모두 적용
클래스와 인터페이스를 동시에 상속받는 경우
- 클래스의 메소드를 상속받고, 상속받은 메소드가 인터페이스까지 오버라이딩
- 오버라이딩이 클래스, 인터페이스의 메소드에 모두 적용
728x90
반응형
'전공 > 객체지향프로그래밍' 카테고리의 다른 글
[객체지향프로그래밍][Java] List 심화 내용(Iterator) (0) | 2023.06.01 |
---|---|
[객체지향프로그래밍][Java] 모듈과 패키지 개념 (Object, Wrapper, Integer, String, StringBuffer, StringTokenizer, Math, Calendar) (0) | 2023.05.31 |
[객체지향프로그래밍][Java] 상속 3 (추상 메소드, 추상 클래스, 인터페이스) (0) | 2023.05.08 |
[객체지향프로그래밍][Java] 상속 2 (오버라이딩) (0) | 2023.04.27 |
[객체지향프로그래밍][Java] 상속 1 (객체 생성, 접근 지정자, 업캐스팅, 다운캐스팅, instanceof 연산자) (0) | 2023.04.27 |