DevGang

[Java] 추상화(Abstract) 본문

Study/Java

[Java] 추상화(Abstract)

별천랑 2021. 5. 6. 19:40

추상 클래스(Abstract Class)

  • 추상 클래스는 객체화될 수 없다. (new, static - x)
  • 추상 클래스를 상속한 클래스들의 공통 자료형이다.
  • 캡슐 단위의 공통 기능의 집중화를 할 수 있다. (공통화 작업)

추상 메서드(Abstract Method)

  • 공통 기능이지만 상속받는 클래스들마다 다른 기능일 경우 자식 클래스에서 구현하도록 한다.
  • 구현을 강제할 수 있다. (에러)
  • protected 접근 지정자는 상속받는 클래스만 사용할 수 있다.
// 추상화 클래스
public abstract class Exam {
    private int kor;
    private int math;

    public Exam() {
        this(0, 0);
    }

    public Exam(int kor, int math) {
        this.kor = kor;
        this.math = math;
    }

    public int getKor() {
        return kor;
    }

    public void setKor(int kor) {
        this.kor = kor;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public abstract int total();

    // protected 접근 지정자는 상속 받는 클래스만 사용할 수 있다.
    protected int onTotal() {
        return kor + math;
    }

    public abstract float avg();
}

// 구현 클래스
class NewExam extends Exam {

    private int eng;

    public NewExam() {
        /*
        super(0,0);
        this.eng = 0;
         */
        this(0, 0, 0);
    }

    public NewExam(int kor, int math, int eng) {
        super(kor, math); // 항상 먼저 생성자 호출 후,
        this.eng = eng; // 새로운 값을 초기화해야 한다.
    }

    public int getEng() {
        return eng;
    }

    public void setEng(int eng) {
        this.eng = eng;
    }

    @Override
    public int total() {
        return onTotal() + eng;
    }

    @Override
    public float avg() {
        return total() / 4.0f;
    }

}

'Study > Java' 카테고리의 다른 글

[Java] SOLID  (0) 2021.06.04
[Java] 생성자  (0) 2021.05.06
[Java] HashMap VS TreeMap  (0) 2021.05.01
[Java] ArrayList VS LinkedList  (0) 2021.04.24
[Java] JVM(Java Virtual Machine)  (0) 2021.04.18
Comments