본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


JAVA

JAVA 스터디 9 - 추상 클래스와 추상메서드

반응형

추상 클래스(abstract class)

추상 메서드(abstract method)

추상메서드란 자식 클래스에서 반드시 오버라이딩 해야만 사용할 수 있는 메소드를 의미한다. 자바에서 추상 메소드를 선언하여 사용하는 목적은 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함이다 . 예를 들면 모듈처럼 중복되는 부분이나 공통적인 부분은 미리 다 만들어진 것을 사용하고 , 이를 받아 사용하는 쪽에서는 자신에게 필요한 부분만을 재정의하여 사용함으로 생산성이 향상되고 배포 등이 쉬워지기 때문이다 .

이러한 추상 메소드는 선언부만이 존재하며 , 구현부는 작성되지 않는다 . 바로 이 작성되어 있지 않은 구현부를 자식 클래스에서 오버라이딩하여 사용하는 것이다 .

 

 

추상 메서드 선언 문법

abstract 반환타입 메소드이름();

 

 

위와 같이 선언부만 있고 구현부가 없다는 의미로 선언부 끝에 바로 세미콜론;을 추가한다 .

추상 클래스(abstract class)

자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스라 한다 . 이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 한다. 즉, 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메서드로 선언해놓으면 , 이 클래스는 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의해야 한다.

 

추상 클래스 선언 문법

abstract class 클래스이름 {

   abstract 반환타입 메소드이름(); <--추상 메서드

}

 

이러한 추상 클래스는 동작이 정의되어 있지 않은 추상 메서드를 포함하고 있으므로 , 인스턴스를 생성할 수 없다 .

추상 클래스는 먼저 상속을 통해 자식 클래스를 만들고 , 만든 자식 클래스에서 추상 클래스의 모든 추상 메서드를 오버라이딩하고 낭서야 비로소 자식 클래스의 인스턴스를 생성할 수 있게 된다.

 

*추상 클래스는 추상 메서드를 포함하고 있다는 점을 제외하면 ,일반 클래스와 모든 점이 같다. 즉, 생성자와 필드 , 일반 메서드도 포함할 수 있다.

 

abstract class Car{
    //일반 클래스와 같이 필드 , 생성자도 포함이 가능하다.
    public String carName;

    public Car(String carName) {
        this.carName = carName;
    }

    //일반 메서드도 포함할 수 있다.
    public void drive(){
        System.out.println("달린다");
    }
   
    abstract void accelerate();
}

// 자식클래스에서는 부모클래스의 추상 메서드를 반드시 오버라이딩해야한다.
class SportsCar extends Car{
   //부모 클래스에 생성자가 있기 떄문에 자식 클래스에서 부모의 생성자를 구현해야한다.
    public SportsCar(String carName) {
        super(carName);
    }

    @Override
    void accelerate() {
        System.out.println("100km/h");
    }
}
class Truck extends Car{
    //부모 클래스에 생성자가 있기 떄문에 자식 클래스에서 부모의 생성자를 구현해야한다.
    public Truck(String carName) {
        super(carName);
    }

    @Override
    void accelerate() {
        System.out.println("50km/h");
    }
}


public class AbstractClassTest {
    public static void main(String[] args) {
        //추상 클래스는 인스턴스화 할 수 없다 .
        //Car car =new Car();
        SportsCar sportsCar = new SportsCar("포르쉐");
        System.out.println(sportsCar.carName);
        sportsCar.drive();
        sportsCar.accelerate();
        Truck truck = new Truck("포터");
        System.out.println(truck.carName);
        truck.drive();
        truck.accelerate();
    }
}
반응형

'JAVA' 카테고리의 다른 글

JAVA 스터디 11 - Object 클래스  (0) 2021.03.18
JAVA 스터디 10 - final  (0) 2021.03.18
JAVA 스터디 8 - 상속  (0) 2021.03.18
JAVA 스터디 7 - 자료구조 LinkedList , Stack , Queue  (0) 2021.02.13
JAVA 스터디 6 - JUNIT5  (0) 2021.02.08