티스토리 뷰
추상 메소드(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
'공부합시다 > 찍먹' 카테고리의 다른 글
[명품자바 프로그래밍] 3장 실습문제 (0) | 2021.03.12 |
---|---|
인터페이스(Interface) (0) | 2021.03.11 |
[JAVA] 가위바위보 게임 (0) | 2021.03.10 |
[JAVA] 조건식_다중 if-else문(3형식) (0) | 2021.03.10 |
[JAVA] 조건식_if-else문(2형식) (0) | 2021.03.10 |
댓글