안드로이드 개발자의 창고
[7일차 Java] Abstract 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 Abstract?
- 추상 메서드 : 코드 부분이 없는 미완성 메서드
- 추상 클래스 : 추상 메서드를 가지고 있는 클래스, class 앞에 abstract를 붙여 표시한다.
- 추상 클래스는 구현되지 않은 메서드를 가지고 있기 때문에 객체 생성이 불가능하다.
- 따라서, 추상 클래스를 상속받는 자식 클래스를 만들어 추상 메서드를 오버라이딩하여 사용한다.
📖 예제 코드
public class MainClass {
public static void main(String[] args) {
TestClass1 t1 = new TestClass1(); <<< 불가능
TestClass2 t2 = new TestClass2();
t2.testMethod1(); // 일반 메서드
t2.testMethod2(); // TestClass2에서 구현한 testMethod2
TestClass1 t1 = new TestClass2();
t1.testMethod2(); // TestClass2에서 구현한 testMethod2
TestClass1 t10 = new TestClass1() {
@Override
public void testMethod2() {
System.out.println("익명 중첩 클래스 사용");
}
};
t10.testMethod2(); // 익명 중첩 클래스 사용
}
}
// 추상 클래스
abstract class TestClass1 {
public void testMethod1() {
System.out.println("일반 메서드");
}
// 추상 메서드
abstract public void testMethod2();
}
// 추상 클래스를 상속받아 구현한 클래스
class TestClass2 extends TestClass1 {
@Override
public void testMethod2() {
System.out.println("TestClass2에서 구현한 testMethod2");
}
}
✔️ 코드 해석
- TestClass1 t1 = new TestClass1();
- 추상 클래스는 완벽한 클래스가 아니기 때문에 직접 객체를 생성하는 것이 불가능하다.
- 따라서 해당 코드는 오류가 발생한다.
- TestClass1 t1 = new TestClass2();
- TestClass1는 추상 클래스이다.
- TestClass2는 TestClass1의 자식 클래스이다.
- 따라서 TestClass2의 인스턴스를 생성하여 TestClass1의 객체에 넣는 것은 가능하다.
- TestClass1 t10 = new TestClass1() { ... }
- TestClass1의 익명 중첩 클래스를 생성한다.
- 익명 중첩 클래스에서 testMethod2()를 오버라이딩한다.
- 이후 testMethod2()를 호출할 때는 오버라이딩된 내용으로 출력된다.
'Computer > Java' 카테고리의 다른 글
[8일차 Java] Thread (0) | 2023.05.06 |
---|---|
[7일차 Java] Interface(인터페이스) (0) | 2023.05.06 |
[7일차 Java] 중첩 클래스 (0) | 2023.05.06 |
[7일차 Java] final (0) | 2023.05.06 |
[7일차 Java] Static (0) | 2023.05.06 |