-> 블로그 이전

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

2021. 11. 24. 17:16Language`/Java

추상 클래스 (abstract)

- 선언은 되어 있으나, 코드가 구현되어 있지 않은 메소드

- 추상 메소드를 가지고 있으면, 반드시 추상 클래스로 선언

- 객체를 생성할 수 없다

- 레퍼런스 변수는 선언 가능하다

 

※ Example

abstract class Calculator{
    public abstract int add(int a, int b);
    public abstract int subtract(int a, int b);
    public abstract double average(int[] a);
}

class Cal extends Calculator{ // 추상 메소드 구현
    @Override
    public int add(int a, int b) {
        return a+b;
    }

    @Override
    public int subtract(int a, int b) {
        return a-b;
    }

    @Override
    public double average(int[] a) {
        double sum = 0;
        for(int i=0; i<a.length; i++)
            sum += a[i];
        return sum/a.length;
    }
}
public class test{
    public static void main(String[] args) {
        Cal t = new Cal();
        System.out.println(t.add(10, 100));
        System.out.println(t.subtract(10, 100));
        System.out.println(t.average(new int [] {1, 3, 5, 7, 9, 11}));
    }
}
-------------------
110
-90
6.0

 

 

인터페이스 (Interface)

- default, private, static 메소드들은 Interface 내에 코드가 작성되어 있어야 한다

- default 메소드의 접근 지정 = public (고정)

- private 메소드는 Interface 내에서만 호출 가능

- static 메소드의 접근 지정 = public(생략되면) or private(지정)

- 추상 메소드 = public abstract 생략 가능

- 필드(멤버 변수)를 만들 수 없다

- 객체를 생성할 수 없다

- 레퍼런스 변수는 선언 가능

- 인터페이스끼리는 상속 가능

 

※ Example

interface PhoneInterface{
    final int TIMEOUT = 10000;
    void sendCall();
    void receiveCall();
    default void printLogo(){
        System.out.println("** Phone **");
    }
}

interface mobilePhoneInterface extends PhoneInterface{
    void sendSMS();
    void receiveSMS();
}

interface MP3Interface{
    public void play();
    public void stop();
}

class smartPhone implements mobilePhoneInterface, MP3Interface{
    @Override
    public void sendCall() {
        System.out.println("따르릉 따르릉~~");
    }

    @Override
    public void receiveCall() {
        System.out.println("전화 왔어요~~");
    }

    @Override
    public void sendSMS() {
        System.out.println("문자 가요~~");
    }

    @Override
    public void receiveSMS() {
        System.out.println("문자 왔어요~~");
    }

    @Override
    public void play() {
        System.out.println("음악 시작~~");
    }

    @Override
    public void stop() {
        System.out.println("음악 중단~~");
    }
}

public class test{
    public static void main(String[] args) {
        smartPhone sp = new smartPhone();
        sp.printLogo();
        sp.sendCall();
        sp.receiveCall();
        sp.sendSMS();
        sp.receiveSMS();
        sp.play();
        sp.stop();
    }
}
---------------------------
** Phone **
따르릉 따르릉~~
전화 왔어요~~
문자 가요~~
문자 왔어요~~
음악 시작~~
음악 중단~~

 

 

추상 클래스 / 인터페이스

비교 목적 구성
추상 클래스 ● 서브 클래스에서 필요로 하는 대부분의 기능을
구현해 두고, 상속받아 활용할 수 있게 한다
● 서브 클래스에서 구현할 수 없는 기능을
추상 메소드로 선언해서 서브 클래스에서 구현하도록
● 추상 메소드, 일반 메소드 모두 포함
● 상수, 변수 필드 모두 포함
인터페이스 ● 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적 ● 변수 필드(멤버 변수)는 포함 X
● 상수, 추상 메소드, 일반 메소드,
default 메소드, static 메소드 모두 포함
● protected 접근 지정 선언 불가
● 다중 상속 지원