추상 클래스란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드입니다.
추상 클래스 만들 때의 조건은 하나 이상의 추상 메소드를 포함시키는 것입니다.
즉, 추상 메소드를 하나 이상 포함하는 클래스가 추상클래스입니다.
abstract class Tree{
abstract void makeFruit();
}
- 추상 클래스 : 추상 메소드를 하나 이상 포함하는 클래스, 클래스의 앞에도 abstract 를 작성해주어야 합니다.
- 추상 메소드 : 몸통이 없고, 앞에는 abstract가 붙는 메소드 입니다.
추상 클래스도 참조 변수를 만들지만, 인스턴스 생성은 불가합니다.
추상 클래스는 일반 메소드도 자유롭게 추가할 수 있습니다.
인터페이스 변수는 정적인 상수이나, 추상 클래스 변수는 그냥 변수입니다. (ex. String )
abstract class Tree{
String name; // 멤버를 추가할 수 있다.
abstract void makeFruit();
void growingUp() { // 일반 메소드를 추가할 수 있다.
System.out.println("나무가 자랍니다.");
}
}
추상 클래스 안에 추상 추상 메소드를 선언해놓으면, 이 클래스를 상속받은 모든 클래스에서는 반드시 이 추상 메소드를 재정의해야 합니다.
abstract class 클래스이름 {
...
abstract 반환타입 메소드이름();
...
추상 클래스는 먼저 상속으로 자식 클래스를 생성한 후에
자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버 라이딩 하고 나서야 인스턴스를 생성할 수 있어요.
다음 예제를 통해서 살펴보겠습니다.
package day16;
abstract class Feeling {abstract void feel();} // 추상 클래스 안에 추상 메소드 생성
class Love extends Feeling { // Feeling 추상 클래스 상속 받은 Love 자식 클래스
void feel () { // 추상 메소드 feel 초기화
System.out.println("사랑");
}
}
class Hate extends Feeling { //Feeling 추상 클래스 상속 받은 Hate 자식 클래스
void feel() { // 추상 메소드 feel 초기화
System.out.println("질투");
}
}
public class Test03 {
// Feeling f = new Feeling(); 는 불가하다. 추상 클래스는 인스턴스를 생성할 수 없기 때문에
public static void main(String[] args) {
Love l = new Love();
Hate h = new Hate();
l.feel();
h.feel();
}
}
추상 클래스, 추상 메소드 생성 -> 자식 클래스, 추상 메소드 초기화 -> 자식 클래스의 인스턴스 실행 의 순서로 구성된 것을 확인할 수 있습니다.
추상 클래스는 앞서 배웠던 인터페이스의 대체용이라고 볼 수 있습니다.
추상 클래스는 추상 메소드 뿐 아니라 생서자, 필드, 일반 메소드도 포함할 수 있으나,
인터페이스는 오로지 추상 메소드와 상수만을 포함할 수 있는 점에서 차이점이 있습니다.
https://blue-dot.tistory.com/72
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 29. 자바 가상머신의 메모리 할당 (0) | 2022.11.01 |
---|---|
자바 기초 공부 일지 28. 예외의 처리 try~catch 구문 (0) | 2022.11.01 |
자바 기초 공부 일지 26. 인터페이스interface , 구현implements (0) | 2022.10.31 |
자바 기초 공부 일지 25. Object 클래스, final 선언, @Override 오버 라이딩 (0) | 2022.10.31 |
자바 기초 공부 일지 24. 메소드 오버라이딩, instanceof 연산자 (0) | 2022.10.31 |