추상 메소드
선언되어 있으나 아직 구현되지 않은 메소드, abstract로 선언
이후 반드시 서브클래스에서 오버라이딩 하여 구현 필요!
추상 클래스
추상 메소드를 하나라도 가졌다면 반드시 추상 클래스로 선언해야 함(없어도 추상 클래스로 선언 가능)
객체 생성 불가
슈퍼 클래스에서는 개념 정의, 서브 클래스마다 목적에 맞게 추상 메소드 다르게 구현
추상 클래스를 상속 받는 서브 클래스:
추상 메소드를 구현하지 않으면 abstract으로 선언해야 함
추상 메소드를 구현하면 추상 클래스 x => @Override로 검사하기
(코드)
인터페이스
클래스가 구현해야 할 메소드들이 선언되는 추상형, interface 키워드로 선언
상수와 추상메소드, default/private/static 메소드 선언 가능
일반 필드(멤버 변수) 선언 불가능!
객체 생성 불가 ex. new PhoneInterface();
레퍼런스 변수는 선언 가능 ex. PhoneInterface galaxy;
다른 인터페이스 상속 가능, 인터페이스 다중상속 가능
인터페이스의 구성 요소들의 특징
- 상수: public만 허용, public static final 생략
- 추상메소드: public abstract 생략 가능
- default: public 생략가능, 인터페이스를 구현하는 클래스에 자동 상속
- private: 인터페이스 내에 있는 다른 메소드에 의해서만 호출 가능
- static: public private 가능, 만약 생략하면 public으로 처리
추상클래스 vs 인터페이스
공통점
- 객체 생성(인스턴스화) 불가, 상속을 위한 슈퍼 클래스로 사용된다
- 가지고 있는 추상메소드를 서브 클래스에서 모두 구현해야 한다
차이점
추상 클래스 | 인터페이스 |
상수, 변수 필드 모두 포함 추상 메소드와 일반 메소드 모두 포함 |
변수 필드 포함하지 않음 protected 접근 지정자 선언 불가 다중 상속 지원 |
같은 슈퍼 클래스를 상속하며 그 슈퍼 클래스가 가진 기능들을 구현해야 할 경우 사용. 쉽게 말해서 기능 확장 | 구현 객체가 서로 다른 슈퍼 클래스를 상속하더라도, 같은 기능을 동작하게 하고 싶을 때 사용. |
'Language > JAVA' 카테고리의 다른 글
자바기반응용프로그래밍 - 주요 패키지와 클래스 (0) | 2022.04.14 |
---|---|
자바기반응용프로그래밍 - 모듈과 패키지 기초 (0) | 2022.04.14 |
자바기반응용프로그래밍 - 캐스팅, 오버라이딩 (0) | 2022.04.13 |
자바기반응용프로그래밍 - 배열 (0) | 2022.04.12 |
자바기반응용프로그래밍 - 상속 (0) | 2022.04.11 |