본문 바로가기
Java/Java 기초문법

[JAVA 기초] 자바 추상클래스와 인터페이스의 차이점

by dev수니 2021. 4. 9.
반응형

 

 

 

인터페이스는 추상클래스의 한단계 더 추상화된 클래스라고 볼 수 있다.

 

두 클래스의 차이점으로

  1. 추상클래스는 단일상속, 인터페이스는 다중상속이다.
  2. 추상클래스는 부모로 부터 요소를 물려받는 상속의 의미로 기능을 확장시키는 의미이다.
  3. 인터페이스는 내부의 요소들을 이를 구현한 클래스에서 반드시 사용하도록 강제하는 것으로 부모로부터 요소를 물려받는 상속의 의미가 아니다.

 

 

다음 예제를 통해 이 사실을 확인해보자.

 

 


 

Ex 예제

다음은 추상클래스를 이용한 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package abstract_;
 
abstract class A7 {
    abstract String b();
    public String c(){
        return "추상클래스 내의 일반 메서드 c";
    }
}
class B8 extends A7 {
    public String b() {
        return "추상클래스 내의 추상메서드 b";
    }
}
 
public class Abstract_Nom {
    public static void main(String[] args) {
        B8 obj2 = new B8();
        System.out.println(obj2.b());
        System.out.print(obj2.c());
    }
}
cs

추상클래스 내에 메서드 추상메서드 b()와 일반메서드 c()를 선언해주었다. 그리고 추상메서드를 상속하는 클래스 B8에서 추상메서드 b()를 오버라이딩 해주었다. 

 

그리고 main() 에서 b() 와 c() 를 호출 한 결과 두 메서드에 다 접근이 가능한 것을 볼 수 있다. 

 

 

추상클래스라고 할지라도 내부일반메서드를 선언할 수 있고 이 추상 클래스를 상속받는 일반클래스에서 일반메서드는 구현해주지 않아도 된다.

 

 

 

 

 

 

Ex 예제

다음은 인터페이스를 이용한 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package interface_;
 
interface Travel{
    void tour();
}
interface Eat{
    void food();
}
class Incheon implements Travel,Eat{   // 두개의 인터페이스를 구현
    public void tour() {            // 메서드 오버라이딩 public 메서드
        System.out.println("소래포구.");
    }
    public void food() {
        System.out.println("조개구이.");
    }
}
 
public class Interface_B {
    public static void main(String[] args) {
        Incheon obj = new Incheon();
        obj.tour();
        obj.food();
    }
}
cs

두 인터페이스를 구현하는 클래스를 생성후 각각의 인터페이스 메서드를 구현해준 모습이다.

 

추상클래스의 경우 다중상속이 불가하지만 인터페이스의 경우 다중상속이 가능한 모습이다.

 

 

반응형

댓글