추상 클래스란
추상 클래스(Abstract Class)란 추상 메소드를 선언하여 상속을 통해서 자식 클래스에서 완성하도록 유도하는 클래스이다.
추상 클래스는 미완성된 설계도라고 표현하기도 한다.
추상 클래스는 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없다.
사용방법
추상 클래스는 "abstract"를 붙여 정의한다.
class 앞에 "abstract" 예약어를 붙여 해당 클래스가 추상 클래스임을 밝힌다.
메소드에 "abstarct" 예약어를 붙이면 추상 메소드를 선언할 수 있다.
// 추상 클래스
abstract class Person{
// 추상 메소드
public abstact void hello();
}
추상 클래스으로 상속 받을 때 "extends" 키워드를 사용한다.
추상 클래스를 상속 받을 때 자식을 클래스 "extends" 키워드를 통해 상속 받는다.
// 추상 클래스
abstract class Person{
// 추상 메소드
public abstact void hello();
}
class Kim extends Persion{
@Override
public void hello() {
// 구현
System.out.println("안녕하세요 김철수 입니다.:)");
}
}
인터페이스
인터페이스(Interface)도 추상 클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성한다
인터페이스는 기본 설계도라고 표현하기도 한다.
인터페이스는 상수와 추상 메소드의 집합이다.
↪ JDK1.8 도입된 default 메소드 사용으로 기존 인터페이스의 기능을 확장 시킬 수 있다.
사용 방법
인터페이스는 "interface" 키워드를 사용하여 선언한다.
인터페이스는 "interface" 키워드를 사용하여 선언하는 한다.
// 인터페이스
public interface Person{
// 추상 메소드
public abstact void hello();
}
class Kim implements Persion{
@Override
public void hello() {
// 구현
System.out.println("안녕하세요 김철수 입니다.:)");
}
}
인터페이스는 다중 상속을 지원해준다.
class Kim implements Persion, Male{
@Override
public void hello() {
// 구현
System.out.println("안녕하세요 김철수 입니다.:)");
}
@Override
public void infoMale() {
// 구현
System.out.println("김철수는 남자입니다.:)");
}
}
추상 클래스 VS 인터페이스
추상 클래스 | 인터페이스 | |
사용 목적 | 상속하여 공통된 기능을 만들고, 확장하기 위함 | 구현하는 객체들이 같은 동작을 보장하기 위함 |
다중상속 | X | O |
추상 메소드 | 0개 이상 | 전부 |
일반 메소드 | 가능 | 불가능(JDK1.8부터는 디폴트, 정적 메소드 가능) |
필드 | 일반 변수, 상수 모두 가능 | 상수만 가능 |
상속 키워드 | extends | implements |
접근 제어자 | 제한 없음 | public |
공통점 | 1. 인스턴스를 생성할 수 없다. 2. 상속받은 클래스는 부모 클래스의 추상 메소드를 구현해야 한다. |
'개발 지식 > Java' 카테고리의 다른 글
[자바/JAVA] 정적 바인딩 VS 동적 바인딩 (의의, 장/단점) (0) | 2023.09.05 |
---|---|
[자바/JAVA] final 의미와 사용법 (0) | 2023.08.30 |
[자바/JAVA] 변수의 선언 위치 (클래스 변수, 인스턴스 변수, 지역 변수) (0) | 2023.08.30 |
[자바/JAVA] 오버로딩(Overloading) VS 오버라이딩(Overriding) (0) | 2023.08.29 |
[자바/JAVA] 클래스 VS 객체 VS 인스턴스 (0) | 2023.08.28 |