[Java] 추상 클래스 : abstract

정재현·2024년 1월 3일

Java

목록 보기
30/43
post-thumbnail

추상 클래스

  • 클래스가 설계도라면 추상 클래스는 미완성된 설계도
  • abstract 키워드를 사용하여 추상 클래스를 선언
  • 추상 클래스는 추상 메서드를 포함 가능
    • 추상 메서드가 없어도 추상 클래스로 선언 가능
  • 추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있다.
  • 추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있다.

선언 방법

	public abstract class 추상클래스명 {

	}

추상 메서드

  • 추상 메서드는 아직 구현되지 않은 미완성된 메서드
  • abstract 키워드를 사용하여 추상 메서드를 선언
  • 추상 메서드는 일반적인 메서드와는 다르게 블록{ }이 없다.
    • 즉, 정의만 할 뿐, 실행 내용은 없다

선언 방법

	public abstract class 추상클래스명 {
		abstract 리턴타입 메서드이름(매개변수, ...);
	}

추상 클래스 상속

  • 추상 메서드는 extends 키워드를 사용하여 클래스에서 상속
  • 상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되어야 한다.

선언 방법

	public class 클래스명 extends 추상클래스명 {
		@Override
 	   public 리턴타입 메서드이름(매개변수, ...) {
		       // 실행문
    	}
	}

예시

  • BenzCar, AudiCar, ZenesisCar 는 horn() 메서드의 내용에 차이가 존재
  • 따라서 horn() 메서드를 추상 메서드로 선언하여 자식 클래스에서 재정의 될 수 있도록 함.

BenzCar : 자식클래스

	public class BenzCar {
	    String company; // 자동차 회사 : GENESIS
	    String color; // 자동차 색상
	    double speed;  // 자동차 속도 , km/h
	
	    public double gasPedal(double kmh) {
	        speed = kmh;
	        return speed;
	    }
	
	    public double brakePedal() {
	        speed = 0;
	        return speed;
	    }
	
	    public void horn() {
	        System.out.println("Benz 빵빵");
	    }
	}

AudiCar : 자식클래스

	public class AudiCar {
	    String company; // 자동차 회사 : GENESIS
	    String color; // 자동차 색상
	    double speed;  // 자동차 속도 , km/h
	
	    public double gasPedal(double kmh) {
	        speed = kmh;
	        return speed;
	    }

	    public double brakePedal() {
	        speed = 0;
	        return speed;
	    }

	    public void horn() {
	        System.out.println("Audi 빵빵");
	    }

	}

ZenesisCar : 자식클래스

	public class ZenesisCar {
	    String company; // 자동차 회사 : GENESIS
	    String color; // 자동차 색상
	    double speed;  // 자동차 속도 , km/h
    
	    public double gasPedal(double kmh) {
	        speed = kmh;
	        return speed;
	    }

    	public double brakePedal() {
    	    speed = 0;
    	    return speed;
    	}

    	public void horn() {
    	    System.out.println("Zenesis 빵빵");
    	}

	}

Car : 부모클래스

	public abstract class Car {
	    String company; // 자동차 회사 : GENESIS
	    String color; // 자동차 색상
	    double speed;  // 자동차 속도 , km/h
	
	    public double gasPedal(double kmh) {
	        speed = kmh;
	        return speed;
	    }
	
	    public double brakePedal() {
	        speed = 0;
	        return speed;
	    }
	
	    public abstract void horn();
	}

정리하기

추상 클래스

  • 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해 만든 미완성 클래스

추상 메서드

  • 상속을 통해서 완성되는 아직 구현되지 않은 미완성 메서드

추상 클래스 상속

  • 추상 클래스를 상속할 경우 추상 메서드는 반드시 오버라이딩이 되어야 한다

profile
공부 기록 보관소

0개의 댓글