Archives
Recent Posts
«   2025/02   »
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
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[7일차 Java] Abstract 본문

Computer/Java

[7일차 Java] Abstract

Wise-99 2023. 5. 6. 22:37

 

 

출처 : 안드로이드 앱스쿨 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