설명
- 부모, 자식 관계인
상속 관계에 얽매이지 않고
,공통 기능
이 필요할 때 사용한다Abstract Method
를 정의해 놓고,구현 (implements)
하는 Class 에서 각 기능들을Overriding
하여 여러가지 형태로 구현할 수 있기에다형성
과 연관되어 있다
- Interface는 해당 Interface를 구현하는 Class 들에 대해
동일한 method, 동작
을강제
하기 위해 존재한다
- 부모, 자식 관계인
장점
- Java 의
다중 상속
이 안돼서 발생하는Abstract Class
의 한계를 보완해 줄 수 있다
- Java 의
단점
- 모든 Class가 Interface를 사용한다면,
공통적으로 필요한 기능
도 구현 (implements) 하는 모든 Class에서 Overriding 해재정의 해야한다는 번거로움
이 존재한다
- 모든 Class가 Interface를 사용한다면,
정리
- Interface는 각각 다른 Abstract Class를 상속하는 Class 들의
공통 기능을 명시할 때
사용하면 편리하다
- Interface는 각각 다른 Abstract Class를 상속하는 Class 들의
설명
- 자식 class에서
반드시 overriding
해야만 하는 method를 의미한다 - method는
선언부 ()
와구현부 {}
로 나누어 지는데, 선언부까지만 작성하고 구현부는 작성하지 않은 method를 의미한다 - method 내용이 상속받는 class에 따라 달라지기 때문에 추상 method를 사용한다
구현부 {}
는 해당 class를 상속 받는 하위 class에서 반드시 작성해야 한다- 구현부를 작성하지 않으면
에러
가 발생한다!
- 구현부를 작성하지 않으면
주석
으로 어떤 기능을 수행하는 method 인지 설명해야 한다overriding
method에는abstract
를 작성하지 않는다
- 자식 class에서
설명
Abstract method
를 하나라도 가지고 있는 class를Abstract class
라고 한다- 즉, 일반 class에는 추상 method가 있을 수 없다!
- Abstract class를 상속 받은 자식 class는 반드시
abstract method
를overriding
해야 한다- abstract class가 자식 class에게 abstract method의
재정의를 강요
한다 abstract class
↔final class
- overriding을 제한하기 위해
상속을 금지
하는 final class와 반대된다!
- overriding을 제한하기 위해
- abstract class가 자식 class에게 abstract method의
- Abstract class는
프로그램 설계
를 목적으로 한다- 반면에, 일반 class는 여러 개의 객체를 생성하고, data를 저장하는 것을 목적으로 한다
- Abstract class는
객체로 생성할 수 없다
- 자식 class에서 abstract class를 상속 받고, abstract method를
overriding
하여 구현을 마친뒤, 자식 class를 이요해서 객체를 생성해야 한다
- 자식 class에서 abstract class를 상속 받고, abstract method를
- 부모와 자식 즉,
상속 관계
에서 Abstract Class를상속 (extends)
받으며 같은 부모 Class (여기서는 Abstract Class)를 상속받는자식 Class들
간에공통 기능
을 각각구현
하고,확장
시키며상속
과 관련되어 있다- 상속은 SuperClass의 기능을 이용, 확장하기 위해 사용된다!
- Abstract Class를 상속하며 Class들 간의
구분
이 가능해 진다
장점
- Abstract class에서
설계
가 완료되면, 자식 class에서 상속을 받아기능을 확장
하는데 용이하다 - 자식 class에서 abstract method의
구현을 강요
하기 때문에표준화 정도
를 높인다 - class 들의
공통 사항
을 한 곳에서 관리할 수 있기 때문에개발 및 유지보수
가 편리해진다
- Abstract class에서
단점
-
Java에서는
다중 상속
을 지원하지 않기 때문에Abstract Class
만으로 구현해야 하는Abstract Method
를강제
하는데는 한계가 있다 -
만약 다중 상속이 가능하다면?
class Vehicle extends Car, Motorcycle { @Override public void run(){ super.drive(); } }
- Car, Motorcycle에 각각 drive() method가 정의되어 있을 경우,
무엇을 상속받아 Overriding 한 것인지 모호
해 진다 - 이것이
다중 상속의 모호성
이고, 이것 때문에 Java는 다중 상속을 막아 놓았다
- Car, Motorcycle에 각각 drive() method가 정의되어 있을 경우,
-
- Abstract Class는
IS - A "~이다"
이고,- Interface는
HAS - A "~을 할 수 있는"
이다
- Interface는
- Abstract Class는
상속
이고,- Interface는
다형성
이다
- Interface는