일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- iterator
- 가비지 컬렉션
- reflection
- java
- Locking Read
- db
- 동시성
- 백엔드
- 동시성 문제
- gc
- foreach
- Varchar
- MySQL
- Di
- CAS
- iterable
- Lock
- 가비지 컬렉터
- Synchronized
- 스프링
- MVCC
- 데이터 타입
- Atomic Type
- 자바
- jpa
- text
Archives
- Today
- Total
과정을 즐기자
추상 클래스와 인터페이스 본문
추상 클래스
- 추상 클래스는 변수를 가질 수 있다.
- 일반 메소드, 추상 메소드 둘 다 있을 수 있다. 자식 클래스에서 일반 메소드는 재정의 할 수도 있고 그냥 사용할 수도 있다.
하지만 추상 메소드는 반드시 재정의 해야한다. - 단일 상속을 지원한다.
코드로 이러한 특징들을 확인해보자
public abstract class AbstractParent {
public int number = 10; // 변수 선언 가능
public void hello() {
System.out.println("hello"); // 일반 메소드 구현가능
}
public abstract void hi(); // 추상 메소드 사용가능
}
public class AbstractChild extends AbstractParent {
@Override
public void hi() {
System.out.println("hi"); // 추상 메소드를 자식 클래스에서 구현해야 한다. (필수)
}
@Override
public void hello() {
System.out.println("hello hello"); // 일반 메소드지만 재정의하여 사용할 수도 있다. (선택)
}
}
인터페이스
- 인터페이스는 public static final로만 선언된 변수만 가질 수 있고 이는 생략할 수 있다.
- 기본적으로 메소드는 public abstract가 생략되어 있다. 추상 메소드로 자식 클래스에서 구현할 필요가 있다.
- 다중 상속을 지원한다.
자바 버전이 올라갈 수록 인터페이스가 추상클래스의 기능을 점점 더 갖게 되었다.
default 메소드로 인터페이스에서도 일반 메소드를 구현할 수 있게 되고 private으로 메소드를 정의할 수도 있게 되었다.
코드로 이러한 특징들을 확인해보자
public interface InterfaceParent1 {
int number = 0; // public static final 생략 가능
void hello(); // public abstract 생략 가능
default void hi() {
System.out.println("hi"); // default 메소드로 일반 메소드를 구현할 수도 있다.
}
private void hiHello() {
System.out.println("hi hello"); // private 으로 일반 메소드를 구현할 수도 있다.
}
}
public class InterfaceChild implements InterfaceParent1, InterfaceParent2 {
@Override
public void hello() {
System.out.println("hello"); // 부모 클래스의 추상 메소드를 구현 해야한다. (필수)
}
@Override
public void hi() {
System.out.println("hi hi"); // 부모 클래스의 일반 메소드를 구현할 수도 있다. (선택)
}
}
'Java' 카테고리의 다른 글
자바가 Call By Reference가 아닌 이유 (0) | 2023.08.05 |
---|---|
enum class로 상수를 관리해야하는 이유 (0) | 2023.06.22 |
Equals와 HashCode 비교 (0) | 2022.12.13 |
Call by Value, Call by Reference (0) | 2022.10.25 |
static 변수와 static 메소드 (0) | 2022.09.18 |