추상 메서드(abstract method)
추상 클래스를 알기 위해서는 먼저 추상 메서드에 대해 알고 있어야 한다.
추상 메서드란 선언부만 있고 구현부가 없는 메서드를 칭한다.
abstract void display();
위와 같이 메서드 뒤에 { } 함수에 내용 부분이 존재하지 않은 메서드를 칭한다.
이 메서드를 만들 때는 앞에 abstract를 적어 주어야 한다.
추상 메서드를 사용하는 목적은 추상 메서드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메서드를 구현하도록 하기 위함이다.
만약 자식 클래스에 반드시 존재해야하는 메서드가 존재하는데 자식클래스에 따라 메서드의 구현부가 전부 다를 때 이를 사용하면 자식 클래스에서 이를 잊지 않고 메서드를 구현할 수 있다.
추상 클래스(abstract class)
추상 클래스란 하나 이상의 추상 메서드를 포함하는 클래스를 추상 클래스라고 한다.
이 클래스를 상속받는 모든 자식 클래스는 현 추상클래스가 가지고 있는 모든 추상 메서드를 반드시 재정의 해야한다.
abstract class Test{
abstract void display();
}
위 코드처럼 추상클래스 선언부에도 abstract를 적어주어야 한다.
추상 클래스는 주의할 점이 있는데 동작이 정의되어 있지 않은 추상 메서드를 포함하고 있으므로 인스턴스를 생성할 수 없다는 것이다.
만약 인스턴스화 하고 싶다면 추상 클래스를 상속받은 자식클래스를 만들고 자식클래스가 추상클래스릐 모든 추상 메서드를 오버라이딩 하면 된다.
인터페이스(interface)
인터페이스는 추상클래스를 더 추상화시켰다고 생각하면 된다.
인터페이스의 구조는 상수와 추상 메서드만 존재한다.
interface Test{
public static final int num = 1;
public abstract void display();
}
위와 같이 인터페이스를 선언할 수 있는데 모든 필드는 public static final로 만들어야 하며 모든 메서드는 public abstart로 만들어야 한다.
인터페이스는 추상클래스와 같이 인스턴스화할 수 없다.
class Real implements Test { }
인스턴스화하고 싶다면 위와 같이 implements로 인터페이스를 상속을 받고 인터페이스가 가지고 있는 모든 추상 메서드를 구현하면 된다.
인터페이스를 사용하는 이유는 클래스와 다르게 다중상속을 지원하기 때문이다.
인터페이스를 다중 상속 하고 싶다면
implements 인터페이스명1, 인터페이스명2, ...
위와 같이 implements 뒤에 상속하고 싶은 인터페이스를 차례로 나열하면 된다.
만약 클래스 상속과 인터페이스상속을 동시에 한다면 extends를 먼저 적고 implements를 적어야 한다.
추가적으로 자바 8 이상부터 추가된 default, static 메서드가 있다.
interface Test{
default void display(){
System.out.println("hello");
}
}
위처럼 default 메서드는 인터페이스에서 구현이 되어 있는 메서드로 자식 클래스가 오버라이딩을 하지 않아도 사용이 가능한 메서드이다.
interface Test{
static void display(){
System.out.println("hello");
}
}
위처럼 static 메서드는 default와 같이 인터페이스 내에서 구현이 되어있는 메서드이며 static이므로 당연히 인스턴스 시키지 않고 사용이 가능하다.
'자바' 카테고리의 다른 글
이너 인터페이스(inner interface) (0) | 2023.08.29 |
---|---|
이너 클래스(inner class) (0) | 2023.08.28 |
접근지정자(access modifier) (0) | 2023.08.27 |
JDK 설치, 환경변수 설정 (0) | 2023.05.03 |
절대경로 상대경로 (0) | 2022.09.04 |