추상클래스
추상클래스는 일반 클래스와 별 다를것이 없습니다.
추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 하는 유도 클래스입니다.
(추상 메서드는 선언부가 있으나 구현부가 없는 메서드를 의미한다.)
"미완성 설계도" 라고도 불리우며, 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없습니다.
class 앞에 abstract 예약어를 선언해 추상클래스라는걸 알려주거나 추상메서드가 포함되어 있으면
추상 클래스라고 한다.
abstract class 클래스 이름 {
...
public abstract void 메서드이름();
}
특징
- 추상 클래스는 인스턴스, 객체를 만들 수 없는 클래스입니다.
=> new 키워드를 사용해 인스턴스 생성이 불가하다.
- 추상 메소드는 자손 클래스에서 메서드의 구현을 강제해야 한다.
- 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다.
- 상속하는 집한간에는 연관관계가 있습니다.
- 다중 상속이 불가능하다.
인터페이스
인터페이스는 기본 설계도라고 부른다.
인터페이스는 추상클래스와 다르게 모든 메서드가 추상 메서드여야 한다.
추상 클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하는 클래스이며 다중 상속이 가능하다.
인터페이스이름 앞에 interface 예약어를 통해 사용한다.
interface 인터페이스이름 {
public static final 상수 이름 = 값;
public abstract voide 메서드이름();
}
특징
- 모든 멤버 변수는 public static final 이여야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이여야 하며, 이를 생략할 수 있다.
- java 8 이상 부터는 static, default method 를 사용할 수 있다.
- 다중상속이 가능하다.
- 상속하는 집합간에는 연관관계가 존재하지 않을 수 있다.
추상클래스 VS 인터페이스
추상클래스는 일반 클래스와 크게 다르지않게 extends 키워드를 사용하고, 인터페이스는 implements 키워드를 통해
구현한다.
추상클래스의 상속
상속은 재사용 + 확장이다.
상속은 상위 클래스의 특성을 하위 클래스에서 상속하고 거기에 더 필요한 특성을 추가 및 확장해서
사용할 수 있다는 의미이다.
- 상속은 상위 클래스의 특성을 하위 클래스에서 재사용하는것이다.
- 상속은 상위 클래스의 특성을 하위 클래스에서 추가 및 확장하는것이다.
라고 생각할 수 있다.
인터페이스의 구현
인터페이스는 클래스의 역할 및 기능을 정의해놓은 메서드의 집합이며, 모든 메서드를 구현하도록 강제하는
특징을 가지고 있다.
추상클래스와 인터페이스는 차이가 크게 나지 않지만 분리해놓은 이유는 자바가 다중 상속을 지원하지 않기 때문입니다.
class myTest extends age, phone {
@Override
public void test(){
super.human();
}
}
위와 같이 age 와 phone 에 human 이라는 메서드가 모두 존재하면 어떻게 될까요?
이러한 문제 때문에 자바에선 다중 상속을 막아버렸습니다.