추상 클래스
- 추상 메서드를 포함한 클래스
- 추상 메서드는 구현코드 없이 메서드 선언만 있음
package abstractex;
public abstract class Example{ // 추상 메서드가 존재한다면, 클래스에도 abstract로 선언해야 됨
public abstract int add(int n1, int n2); // 추상 메서드, 메서드에 구현 코드가 없으면 abstract로 선언
}
사용
- 상속을 위한 클래스
- 추상 메서드: 하위 클래스가 구현해야 됨
(각 하위 클래스마다 다르게 구현돼야 함)
- 구현된 메서드: 하위 클래스가 공통으로 사용할 수 있음
(하위 클래스가 overriding(재정의) 할 수 있음)
템플릿 메서드
- 추상 메서드나 구현된 메서드를 활용해
전체 기능의 흐름을 정의하는 메서드
final로 선언하면 하위 클래스에서 재정의 할 수 없음
- 프레임 워크에서 많이 용되는 설계 패턴
abstract class Animal { // 추상 클래스
public void start_class(){
hello();
info(); // 추상 메서드
bye();
}
public void hello() {
System.out.println("저 멀리 동물이 인사합니다.");
}
public void bye(){
System.out.println("동물이 멀어집니다..");
}
abstract void info(); // 추상 메서드
}
class Cat extends Animal { // 상속
@Override
public void info(){ // 재정의
System.out.println("동물의 정체는 고양이입니다!");
}
}
class Dog extends Animal { // 상속
@Override
public void info(){ // 재정의
System.out.println("동물의 정체는 개입니다!");
}
}
public class Main{
public static void main(String[] args) {
Cat cat = new Cat(); // 객체 생성
Dog dog = new Dog(); // 객체 생성
cat.start_class(); // 클래스 함수 호출
System.out.println("------------------------");
dog.start_class(); // 클래스 함수 호출
System.out.println("------------------------");
}
}
// 결과
// 저 멀리 동물이 인사합니다.
// 동물의 정체는 고양이입니다!
// 동물이 멀어집니다..
// ------------------------
// 저 멀리 동물이 인사합니다.
// 동물의 정체는 개입니다!
// 동물이 멀어집니다..
// ------------------------
final 예약어
- final 변수는 값이 변경될 수 없는 "상수"
- final 변수는 오직 한 번만 값을 할당할 수 있음
- final 메서드는 하위 클래스에서 재정의 X
- final 클래스는 더 이상 상속 X
'JAVA' 카테고리의 다른 글
ep 06-1. Interface (0) | 2022.12.11 |
---|---|
ep 05-2. 문제 풀이 (0) | 2022.12.02 |
ep 04-3. 문제풀이3 (0) | 2022.11.27 |
ep 04-2. 상속과 다형성 (0) | 2022.11.27 |
ep 04-1. 배열과 ArrayList (0) | 2022.11.27 |