Java
추상 클래스와 인터페이스
320Hwany
2022. 11. 10. 11:25
추상 클래스
- 추상 클래스는 변수를 가질 수 있다.
- 일반 메소드, 추상 메소드 둘 다 있을 수 있다. 자식 클래스에서 일반 메소드는 재정의 할 수도 있고 그냥 사용할 수도 있다.
하지만 추상 메소드는 반드시 재정의 해야한다. - 단일 상속을 지원한다.
코드로 이러한 특징들을 확인해보자
public abstract class AbstractParent {
public int number = 10; // 변수 선언 가능
public void hello() {
System.out.println("hello"); // 일반 메소드 구현가능
}
public abstract void hi(); // 추상 메소드 사용가능
}
public class AbstractChild extends AbstractParent {
@Override
public void hi() {
System.out.println("hi"); // 추상 메소드를 자식 클래스에서 구현해야 한다. (필수)
}
@Override
public void hello() {
System.out.println("hello hello"); // 일반 메소드지만 재정의하여 사용할 수도 있다. (선택)
}
}
인터페이스
- 인터페이스는 public static final로만 선언된 변수만 가질 수 있고 이는 생략할 수 있다.
- 기본적으로 메소드는 public abstract가 생략되어 있다. 추상 메소드로 자식 클래스에서 구현할 필요가 있다.
- 다중 상속을 지원한다.
자바 버전이 올라갈 수록 인터페이스가 추상클래스의 기능을 점점 더 갖게 되었다.
default 메소드로 인터페이스에서도 일반 메소드를 구현할 수 있게 되고 private으로 메소드를 정의할 수도 있게 되었다.
코드로 이러한 특징들을 확인해보자
public interface InterfaceParent1 {
int number = 0; // public static final 생략 가능
void hello(); // public abstract 생략 가능
default void hi() {
System.out.println("hi"); // default 메소드로 일반 메소드를 구현할 수도 있다.
}
private void hiHello() {
System.out.println("hi hello"); // private 으로 일반 메소드를 구현할 수도 있다.
}
}
public class InterfaceChild implements InterfaceParent1, InterfaceParent2 {
@Override
public void hello() {
System.out.println("hello"); // 부모 클래스의 추상 메소드를 구현 해야한다. (필수)
}
@Override
public void hi() {
System.out.println("hi hi"); // 부모 클래스의 일반 메소드를 구현할 수도 있다. (선택)
}
}