티스토리 뷰

추상 메소드(abstract method)

 - 선언은 되어 있으나 코드가 구현되어 있지 않은 상태. 껍데기만 있는 메소드임.

 - 메소드의 내용이 부모 클래스에서 구체화하여 정의할 필요가 없을 경우, 추상 메소드로 선언만 하고 상속 받은 자식 클래스에서 재정의 하도록 할 때 사용.

 - 추상 메소드를 사용하기 위해서는 해당 메소드를 재정의 해야함(오버라이딩).

 

추상 클래스(abstract class)

 - 추상 메소드를 가지고 있으면 반드시 추상 클래스로 선언 되어야 함. 그렇지 않을 경우 오류 발생함.

 - 일반적인 클래스와 달리 추상 클래스는 구체적이지 않고 추상적임.

 - 추상 클래스의 객체(인스턴스)를 생성할 수 없음.

 - 슈퍼 클래스로 사용할 수 있음.

 

 

작성 방법

 - abstract 키워드와 함께 원형만 선언하고 코드는 작성하지 않음.

abstract class 클래스_이름 { // 추상 클래스 선언
	public abstract void 메소드_이름(); // 추상 메소드 선언
}

 

추상 메소드를 사용하지 않는 경우의 예시는 아래와 같다.

/*AA라는 사람이 b, c라는 사람에게 우리가 aaa메소드를 만들어서 재료를 구성하기*/
class A {
	public void aaa() {// AAA라는 메소드를 만들었음
		System.out.println("AAA");
	}
}

class B {
	public void Aaa() {

	}
}

class C {
	public void aAa() {

	}
}

public class Exam14 {
	public static void main(String[] ar) {
		A ap = new A();
		ap.aaa();
		B bp = new B();
//		bp.aaa(); // 자바는 대소문자 구분을 하기 때문에 오류가 남
		bp.Aaa();
		C cp = new C();
//		cp.aaa(); // 자바는 대소문자 구분을 하기 때문에 오류가 남
		cp.aAa();
	}
}

 

추상 메소드를 사용한 경우의 예시는 아래와 같다.

abstract class AA {
	public abstract void aaa();
	/*
	 - 추상 메소드를 만들면 반드시 추상이라고 정의를 해야 함. 메소드의 내용부가 없음.
	   → public void aaa() {[이 부분이내용부]}
	 - 추상 클래스를 가지고 객체 생성을 할 수 없음.
	 */
}

class BB extends AA { // 위의 AA클래스와 똑같은 메소드로써 이것을 재정의 해야 함(오버라이딩).
	public void aaa() {
		System.out.println("BBB");
	}
}

class CC extends AA { // 위와 같은 메소드가 있으면 이것을 재정의 해야 함(오버라이딩).
	public void aaa() {
		System.out.println("CCC");
	}
}

public class Exam15 {
	public static void main(String[] ar) {
//		AA ap = new AA(); //추상 클래스이기 때문에 만들 수 없음
		BB bp = new BB();
		CC cp = new CC();
		AA ap1 = new BB(); // 부모클래스가(이름) 자식을 관리하는 것에 대한 의미임.
		AA ap2 = new CC(); // 부모클래스가(이름) 자식을 관리하는 것에 대한 의미임.
		ap1.aaa(); // 하위에 있는 메소드를 찍는다.
		ap2.aaa(); // 하위에 있는 메소드를 찍는다.
	}
}
반응형
LIST
댓글
링크
공지사항
최근에 올라온 글