추상 클래스
- 하나 이상의 추상 메서드를 포함하지만 없을 수도 있다.
- 주로 상속 계층에서 자식 멤버의 이름을 통일하기 위해서 사용한다.
추상 클래스는 인스턴스를 생성하지 못한다.
추상 클래스 s = new 추상클래스(); // (XX)
추상 클래스 선언
abstract class 클래스이름{
//필드
//생성자
//메서드 --> 일반적으로 하나 이상의 추상 메서드 포함함.
}
추상 메서드 선언
abstract 반환타입 메서드 이름(); //메서드 본체가 없다.
인터페이스
장점
- 통합에 신경쓰지 않고 다양한 형태로 새로운 클래스 개발 가능하다.
- 인터페이스로 다중 상속 효과를 간접적으로 얻을 수 있다.
예
대표적 인터페이스에는 java.lang 패키지의 ClearSequence, Comparable, Runnable 등이 있다. java.util 패키지의 Collection, Comparator, List 등이 있다.
객체의 크기를 비교하는 Comparable 인터페이스
public interface Comparable{
int compareTo(Object other); //객체 other보다 크면 양수, 같으면 0, 작으면 음수 반환
}
구조
interface 인터페이스 이름{
//상수 필드
//abstract 메서드
//default 메서드
//static 메서드
//private 메서드
}
👉 컴파일을 하면 확장자가 class인 파일을 생성한다.
인터페이스의 수정과 기존 구현 클래스: 디폴트 메서드
default 반환타입 디폴트메서드이름() {
//본체를 구성하는 코드
}
인터페이스 상속
interface 자식인터페이스 extends 부모 인터페이스{
//인터페이스 상속하려면 extends 키워드 사용
}
class 자식클래스 implements 부모인터페이스{
//인터페이스 구현하려면 implements 키워드 사용
}
인터페이스는 다중 상속할 수 있지만, 클래스는 다중 상속이 불가능하다!
인터페이스를 이용한 다중 상속 효과
인터페이스 타입
- 인터페이스의 구현 클래스는 그 인터페이스의 자식 타입이다.
인터페이스 변수 = 구현객체
- 구현 객체는 인터페이스 타입이므로 자동 변환된다.
- 인터페이스 타입 변수가 구현 객체를 참조한다면 강제 타입 변환이 가능하다.
구현클래스타입 변수 = (구현클래스타입) 인터페이스타입변수
인터페이스와 다형성
중첩 클래스와 중첩 인터페이스
중첩클래스는 외부 클래스를 상속할 필요 없이 외부 클래스의 private 멤버까지 사용할 수 있다.
종류
중첩 클래스 구조
class 외부클래스{
class 멤버클래스{ //외부 클래스의 멤버로 선언된 클래스
}
interface 중첩인터페이스{
}
}
class 외부클래스{
void 메서드() {
class 지역 클래스{ //외부클래스의 메서드 내부에 선언됨.
}
}
}
컴파일 후 생성 파일
외부클래스$멤버클래스.class
외부클래스$중첩인터페이스.class
외부클래스$1지역클래스.class
외부클래스 접근
외부클래스.this
중첩클래스의 객체생성
외부클래스.내부클래스 변수 = 외부클래스의 객체변수.new 내부클래스생성자();
외부클래스.정적멤버클래스 변수 = new 외부클래스.정적멤버클래스생성자();
익명 클래스
class OnlyOnce extends Parent {
//Parent가 클래스면 오버라이딩한 메서드
//Parent가 인터페이스라면 구현한 메서드
}
Parent p = new OnlyOnce(); //객체 생성
중첩 클래스의 특수한 형태, 코드가 단순해지기 때문에 이벤트 처리나 스레드 등에서 자주 사용한다.
🔻
Parent p = new Parent(){
//Parent가 클래스면 오버라이딩한 메서드
//Parent가 인터페이스라면 구현한 메서드 //무명 클래스 본체로서 OnlyOnce 클래스의 본체와 동일하다.
};
참조: 쉽게 배우는 자바프로그래밍 2판, 한빛아카데미, 우종정, 2020.
'Java,Spring' 카테고리의 다른 글
[자바 기초 문법] 입출력 처리 (0) | 2021.05.26 |
---|---|
[자바 기초 문법] 예외처리 (0) | 2021.05.26 |
[자바 기초 문법] 상속의 이해와 다형성 (0) | 2021.05.24 |
[자바 기초 문법] 문자열과 배열 (0) | 2021.05.13 |
[자바 기초 문법] 객체 지향 (0) | 2021.05.13 |