본문 바로가기
JAVA

ep 05-1.추상 클래스

by L_SU 2022. 12. 2.

추상 클래스

- 추상 메서드를 포함한 클래스

- 추상 메서드는 구현코드 없이 메서드 선언만 있음

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