[Java] 추상클래스 / 인터페이스

쓰옹·2022년 11월 22일
0

📙 Java 잡아🤏

목록 보기
12/25
post-thumbnail

추상클래스 (abstract class)

abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것

  • 상속받는 클래스마다 반드시 동작이 달라지는 경우 ,
    상속받는 클래스의 작성자가 반드시 작성하도록 하기 위함
  • 상속받는 자식 클래스 없이 인스턴스로 생성 불가

형식

  • 추상 클래스는 항상 추상 메소드를 포함.
  • 추상메소드가 아닌 메소드 존재 가능
  • 추상메소드는 함수 몸체가 없어야 함
  • 예약어 abstact 사용
abstract class A{
    public abstract int b();  // {}중괄호 안의 내용일 함수 몸체가 없음

    public void d(){
        System.out.println("world");
    }
}

class B extends A{    
    @Override
    public int b() {   // 상속받은 메소드 상세 구현
        return 1;
    }
}





인터페이스(interface)

클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언한느 역할

  • 추상메소드와 상수로만 이루어짐
  • 구현 코드가 없음
  • 당연히 인스턴스 생성 불가
// 계산기
public interface Main {
	//인터페이스에서 선언한 변수는 컴파일 과정에서 상수로 변환
    double PI = 3.14;
    int ERROR = -999999999;
	//인터페이스에서 선언한 메소드는 컴파일 과정에서 추상 메소드로 변환
    int add(int num1, int num2);
    int substract(int num1, int num2);
    int times(int num1, int num2);
    int divide(int num1, int num2);
}
  • abstract 예약어를 쓰지 않아도 자동으로 추상메소드로 변환

클래스에서 구현하기 (implements)

interface Flyable {                  // 동작만 정의
    void fly (int x, int y, int z);
}

class Pigeon implements Flyable{    // implements로 구현
    private int x,y,z;
    @Override
    public void fly(int x, int y, int z) {
        printLocation();
        System.out.println("날아갑니다");
        this.x = x;
        this.y = y;
        this.z = z;
        printLocation();
    }

    public void printLocation() {
        System.out.println("현재위치: "+ x + ", "+y+", "+z);
    }
}



public class Main{
    public static void main(String[] args) {
        Flyable pigeon = new Pigeon();
        pigeon.fly(1, 2, 3);
    }
}

특징

  • 구현하는 객체의 동작의 명세(specification) 또는 약속의 역할

  • 다중상속 가능

    • 구현만 하면
  • 인터페이스 간에도 상속 가능

    • extends 사용
  • 메소드 시그니처만 선언 가능







🧐 reference

박은종, 『Do it! 자바 프로그래밍 입문』, 이지퍼블리싱(주), 2018
스파르타코딩클럽 <Java 실무 기초 KDT 실무형 스프링 백엔드 엔지니어 양성과정 1회차>

profile
기록하자기록해!

0개의 댓글