일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- MySQL
- gc
- Varchar
- 동시성 문제
- iterable
- 자바
- Di
- 가비지 컬렉터
- Locking Read
- iterator
- Synchronized
- reflection
- Atomic Type
- text
- CAS
- java
- MVCC
- 가비지 컬렉션
- 동시성
- Lock
- 스프링
- jpa
- foreach
- db
- 백엔드
- 데이터 타입
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 |