JAVA 객체 지향 핵심

(JAVA) 추상 클래스(abstract class) - 18

mynote6676 2025. 4. 23. 10:55

학습 목표

1. 추상 클래스란 뭘까?

2. 추상 클래스 구현해 보기

 

1. 추상 클래스란 뭘까?

추상 클래스(Abstract Class)는 하나 이상의 추상 메서드를 포함하고 있는 클래스입니다. 추상 메서드는 구현이 없는(메서드 몸체가 없는) 메서드이며, 추상 클래스 내에서는 이러한 추상 메서드의 정의만을 포함하고 있습니다.

추상 클래스는 직접적으로 객체를 생성할 수 없으며, 다른 클래스에서 상속받아 구현되어야 합니다.

추상 메서드란?

 

 

 

package com._abstract;

/**
 * 추상 클래스란? (abstract)
 * 하나 이상의  추상메서드를 포함하는 클래스 이거나
 * class 키워드앞에 abstract 가지고 있으면 추상 클래스이다.
 */
//강제적으로 타입으로만 설꼐하는 기법을 말함
// abstract - 강제성
public abstract class Animal {

    String name;

    public void move(){
        System.out.println("이동합니다");
    }

    //추상메서드 만들어보자
    //클래스 내에 단 하나라도 추상메서드를 가진다면
    //그 클래스는 반드시 추상클래스가 되어야함
    public abstract void hunt();


}

 

package com._abstract;
/**
추상클래스를 활용하는 이유
단하나로 추상메서드가 있으면 추상클래스가 되어야함
 */
public class Tiger extends  Animal{

    @Override
    public void hunt() {
        System.out.println("호랑이가 앞발로 사냥합니다.");
    }

    @Override
    public void move() {
        System.out.println("살금살금 조심히 이동합니다.");
    }
}// end of class

 

package com._abstract;

public abstract class Human extends Animal{

    @Override
    public void move() {
        System.out.println("사람이 두발로 걷습니다");
    }
}

 

package com._abstract;

public class Person extends Human{

    //구현 메서드로 만들어주면됨
    @Override
    public void hunt() {
        System.out.println("총으로 동물들을 사냥합니다.");
    }
}

 

 

package com._abstract;

public class MainTest1 {

    public static void main(String[] args) {
    //객체 지향 개념으로 animal이라는 클래쓰를 인스턴스화 시키면 쫌 오카시
        Animal animal;// 타입선언가능
       // animal = new Animal();<--오류발생
        //Amimal클래스는 abstract키워드를 붙혀 추상클래스로 설계함
        //그러면 추상 클래스는 new란 키워드 생성자를 활용해서
        //독립적으로 메모리에 올릴 수 없다.

        //Human human = new Human();;
        //개발자가 객체를생성 시킬 때 다른 사용자가 마음대로 생성하지 못하게 강제성을 지님


    }//end of main

}//end of class

 

 

 

package com._abstract;

public abstract class Computer {

    public abstract void display();
    public abstract void typing();
    public  void turnOn(){
        System.out.println("컴퓨터 켠다.");
    }
    public  void turnOff(){
        System.out.println("컴퓨터를 끊다.");
    }

}

 

package com._abstract;

public class DeskTop extends Computer{

    @Override
    public void display() {
        System.out.println("모니터");
    }

    @Override
    public void typing() {
        System.out.println("타자쳐");
    }
}

 

package com._abstract;

public  abstract class NoteBook extends Computer {

    @Override
    public void typing() {
        System.out.println("타자쳐");
    }
}

 

package com._abstract;

public class MyNoteBook extends NoteBook{

    @Override
    public void display() {
        System.out.println("모니터 켜");
    }
}