자바/자바 입문 공부일지

자바 기초 공부 일지 27. 추상 클래스

Tomitom 2022. 10. 31. 17:37
반응형

 

추상 클래스란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드입니다. 

추상 클래스 만들 때의 조건은 하나 이상의 추상 메소드를 포함시키는 것입니다. 

즉, 추상 메소드를 하나 이상 포함하는 클래스가 추상클래스입니다. 

 

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

 

자바 기초 공부 일지 26. 인터페이스interface , 구현implements

●  인터페이스 : 규약, 접점 user interface (UI) 유저 인터페이스는 결구구 사용자에게 제공하는 규약이자 접점 입니다. 사용자가 그것을 통해서 접근할 수 있는 접점입니다. 자바에서 인터페이

blue-dot.tistory.com

 

 

반응형