본문으로 바로가기

추상 클래스와 인터페이스의 차이

category Java언어 2018. 8. 16. 20:09

추상 클래스(abstract class)란?

 

1. 추상 메소드를 하나이상 가지고 있는 클래스

2 .추상 클래스는 객체를 생성할 수 없다.

3. 오직 상속을 목적으로 사용한다.

   (예외적으로는 inner class로 사용한다.)

4. 오버 라이딩의 강제성을 부여한다.

- 추상 클래스를 상속받은 클래스는 그 자체도 추상 클래스가 된다.

  따라서 상속을 받은 클래스는 추상 메소드를 오버 라이딩을 하지않고는 객체 생성이 불가능하다. => 오버 라이딩의 강제화

5. 부모 입장에서는 서브 클래스가 가지고 있는 것들을 알기 쉽기 때문에 관리가 쉽다.

   (서브 클래스들이 가지고 있는 공통된것은 항상 부모 클래스도 가지고 있어야 한다.)

6. abstract class를 사용하는 목적 코드의 재사용 및 코드의 확장

 

*추상메소드 
 C언어의 함수선언 및 함수 정의중 함수의 선언만을하고 정의는 하지않는것.(body가 없는상태)
 C언어의 선처리부에 함수를 선언하는 것 처럼 사용(JAVA는 C언어를 보고 만들었기 때문)


인터페이스(interface)란?


1. final static 상수(멤버 변수 사용 불가능), 추상 메소드로 구성

2. 모든 메소드가 추상 메소드이다. 따라서 받는쪽에서 실제 구현(오버라이딩)해야한다.

3. 다중상속을 대체

4. 동적 바인딩이 가능

5. interface를 사용하는 목적 : 만들어 놓은 요구사항을 꼭 구현해라.(요구사항을 정리한것)

 

interface interfaceTest{
 
    // field
    public static final int MAX = 5;
    
    //method
    public abstract add();
 
}
cs



클래스 상속과 인터페이스 상속의 목적적 차이 

 

상속(abstract)의 목적 : 확장

클래스 상속의 목적 : 클래스의 확장, 코드의 재사용

인터페이스 상속의 목적 : 인터페이스 확장

 

구현(implements)의 목적 : 실제 기능의 구현

 


주의할점

1. 자바는 다중상속이 불가능 하다. (진리)

2. interface는 interface만을 (abstract)상속받을 수 있다.

3. class는 class만을 상속받을 수 있다.

   class는 interface를 implements(구현)할 순 있지만 (abstract)상속받을 순 없다.

4. class는 하나의 class만을 상속받을 수 있다.(클래스의 다중상속 불가능)

5. interface는 여러개의 interface를 상속받을 수 있다.(interface간의 다중상속 가능) <- but java는 다중상속 불가 (진리)

 

 


정적바인딩
나의 객체를 나의 reference타입으로 접근하는것

 

동적바인딩
부모 클래스의 reference 타입으로 자식 객체를 접근하는 것.
인식 범위 : 부모 클래스에도 있고 자식 클래스에도 있는것(오버 라이드 한것만 접근가능)
               자식 클래스가 예외적으로 추가한 부분은 접근 불가.


'Java언어' 카테고리의 다른 글

this 키워드  (7) 2018.08.20
접근 지정자  (0) 2018.08.20
Data Type(기본형,참조형)의 종류와 Size  (1) 2018.08.16
Thread Life Cycle (생명 주기)  (0) 2018.08.16
Thread 생성방법  (0) 2018.08.16