추상 클래스
추상클래스는 new 연산자를 사용해서 인스턴스를 생성시키지 못한다.
Animal animal = new Animal(); // (X)
추상 클래스는 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용된다.
코드로 설명하면 extends 뒤에만 올 수 있는 클래스이다.
class Ant extends Animal {...} // (O)
추상 클래스도 생성자가 반드시 있어야 한다. - 자식 객체가 생성될 때 super(..)를 호출해서 추상 클래스 객체를 생성하기 때문.
추상 클래스의 용도
- 실체 클래스마다 다른 점만 실체 클래스에 선언하게 되면 실체 클래스를 작성하는데 시간을 절약할 수 있다.
인터페이스
- 구현하는 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제한다.
- 인터페이스는 데이터를 저장할 수 없기 때문에 데이터를 저장할 인스턴스 또는 정적필드를 선언할 수 없고 상수 필드만 선언할 수 있다.
- 모든 멤버변수는 public static final이어야 한다. 단, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 여야 한다. 이 또한 생략할 수 있다.
인터페이스도 상속이 가능하지만
상속은 인터페이스 끼리만 가능하다.
인터페이스는 구현 하여야 하며
상속의 extends와 달리 implements 키워드를 사용한다.
- 다중 상속이 가능하다
class Class implements Interface1, Interface2
인터페이스도 다형성으로 다음과 같이 할 수 있다.
public interface MyInterface {
int VALUE = 5;
int calculate(int a);
}
위와 같은 인터페이스가 있다고 할 때
public CalCulA implements MyInterface {
int calculate(int a) {
return VALUE+a;
}
}
public CalCulM implements MyInterface {
int calculate(int a) {
return VALUE*a;
}
}
이와 같이 구현한 두개의 클래스가 있다고 할 때,
MyInterface add = new CalCulA();
MyInterface add = new CalCulM();
int target = 5;
System.out.println(add.calculator(target));
System.out.println(mul.calculator(target));
다형성으로 인해 이렇게 사용할 수 있다.
단, 다형성에서 언급한 것처럼
인터페이스에 없는 메서드를 사용하면 에러가 발생한다.
둘의 차이점으로는 인터페이스는 클래스가 아니지만 추상 클래스는 클래스다.
'Java' 카테고리의 다른 글
Java 설치하기 - JDK 설치, Eclipse 설치 (이대로만 따라하세요!) (0) | 2020.04.27 |
---|---|
NullPointException 이 나는 경우 (0) | 2020.02.22 |
년,월,일을 입력받아 요일을 출력해주는 프로그램 (0) | 2019.11.13 |
버전별 만년달력 (미완) (0) | 2019.11.13 |
별찍기 예제 (0) | 2019.11.13 |