티스토리 뷰

배운 것 기록/java

abstract 추상화

키죽 2022. 6. 7. 22:04

추상 클래스

객체를 생성할 수 없는 클래스, new 연산자를 이용한 생성자 호출이 불가능하다.

- 추상메서드를 가질 수 있으나 상속받는 서브클래스에서 반드시 오버라이딩 해야한다.

  (구현의 강제성을 부여해서 코드의 통일성이 향상)

- 추상메서드, 일반메서드, 생성자, 멤버변수를 가질 수 있음

- 상속으로 서브클래스에서 사용 가능, 업캐스팅으로 다형성 활용 가능

 

abstract method

추상 메서드.

- 메서드의 구현부가 없는 추상메서드는 실행할 코드가 없기 때문에 외부에서 호출 불가

- 추상 메서드를 갖는 클래스는 반드시 추상 클래스로 선언해야한다! (반대의 경우는 가능하다)

[접근제한자] abstract [리턴타입] 메서드명 ([매개변수...]);

 

public class Ex1 {

	public static void main(String[] args) {
		
//		AbstractClass ac = new AbstractClass();
		
		// 추상클래스를 상속받아 추상메서드를 구현한 서브클래스의 인스턴스 생성
		SubClass sc = new SubClass();
		sc.abstractMethod();	// 서브클래스 오버라이딩 추상메서드!
		
//		new MiddleClass();
		// 추상클래스는 인스턴스 생성은 불가능 하지만, 변수는 가능(다형성)
		// 변수의 클래스 타입으로 사용할 수 있다!
		AbstractClass ac = new SubClass2(); // SubClass2 -> AbstractClass 업캐스팅
		// 업캐스팅 시 참조영역이 축소되지만, 추상메서드 호출이 가능하다!
		ac.abstractMethod();	// AbstractClass -> MiddleClass -> SubClass2
		
	}
}


abstract class AbstractClass {
	// 바디를 정의할 경우 오류 발생!
//	public abstract void abstractMethod() {
//		System.out.println("일반 메서드!");
//	}
	
	public abstract void abstractMethod();

	// 추상클래스는 멤버변수와 일반 메서드, 생성자도 가질 수 있다.
	int a;	// 인스턴스 멤버변수
	static int b;	// static 멤버변수
	
	public AbstractClass() {}	// 생성자
	public void print() {}		// 일반메서드
	public static void print2() {} // static 메서드
}

// 추상클래스를 상속받는 서브클래스 정의(= 실체(구현체) 클래스)
// => 추상클래스는 인스턴스 생성은 불가능하지만 상속은 가능하다!
class SubClass extends AbstractClass {

	@Override
	public void abstractMethod() {
		// 메서드 내의 코드는 서브클래스에서 기술할 수 있다!
		System.out.println("서브클래스 오버라이딩 추상메서드!");
	}
}

abstract class MiddleClass extends AbstractClass {}

class SubClass2 extends MiddleClass {

	// 추상클래스의 서브클래스가 추상클래스로 선언된 상태에서
	// 해당 클래스를 상속받은 서브클래스에서 추상메서드를 구현
	@Override
	public void abstractMethod() {
		System.out.println("AbstractClass -> MiddleClass -> SubClass2");
	}

'배운 것 기록 > java' 카테고리의 다른 글

enum  (0) 2022.06.10
interface  (0) 2022.06.08
레퍼런스 형변환  (0) 2022.06.02
super, final  (0) 2022.06.01
상속  (0) 2022.05.31
댓글
최근에 올라온 글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함