[JAVA] 자바 - 추상화 클래스(abstract 클래스)
by mini_min
[JAVA]
자바 - 추상화 클래스(abstract 클래스)
✔️ 추상화 클래스란?
추상화 클래스는 선언만 있고 정의가 없는 하나의 추상 메소드를 갖는 클래스
= 하위 클래스에서 재정의할 것으로 예성되는 메소드에 대해 미리 호출 계획을 세워두는 것
🏷️ 특징
클래스가 적어도 하나의 추상화 메소드 포함!!
클래스명 앞에 abstract 키워드 붙여서 추상 클래스로 명시한다!!
❌ static, final 과 같이 사용할 수 없다.
❌ 미완성 클래스라 객체 생성이 불가하다!!!
⭐ 추상 클래스는 독립적으로 존재 xxx 하위클래스를 가짐
하위 클래스를 통해서만 객체 생성이 가능하다.
⭐ 이때, 하위 클래스는 추상 클래스가 아닌 경우 반드시 모든 추상 클래스 재정의 해야한다.
❌ 추상 메소드를 포함할 수도 있고 포함 안할 수도 있다.
❌ abstract 키워드는 클래스와 메소드에서만 사용 가능하다.
필드나 로컬 변수에서는 사용할 수 없다!
◾ 정렬 관련 추상 클래스를 만들어보기
abstract class SortInt{ private int[] value; //추상 메소드 protected abstract void sorting(); //다른 메소드 정의 (1.배열) public void sort(int[] value) this.value = value; sorting(); }
💡 추상 클래스인 SortInt 에는 1)추상메소드 2)일반메소드 2개가 있다.
추상 클래스는 독립적으로 존재하여 객체가 생성될 수 없기 때문에 하위클래스에서 추상 메소드가 재정의 될 것을 기대해본다. 일반 메소드는 하위 클래스에서 재정의 되어 사용될 추상 메소드를 가져와서 사용할 수 있다. (하단에 sorting();)
class BubbleSort extends SortInt{ //버블정렬 (추상 클래스의 하위클래스) //추상 메소드 재정의 : 하위클래스가 추상 클래스가 아니니까 추상 메소드 재정의 @Override protected void sorting() { boolean flag = true; for(int i=1; flag; i++) { flag = false; for(int j=0; j<length()-i; j++) { if(compare(j,j+1) > 0) { swap(j, j+1); flag = true; } } } } } public static void main(String[] args) { int[] num = new int[] {35,8,14,54,19,22,33}; // up-casting //자식으로 객체 생성 SortInt ss = new BubbleSort(); ss.sort(num);
💡 버블정렬 이라는 추상 클래스의 하위클래스를 만들고, 추상 클래스에 있던 추상 메소드를 재정의한다.
그리고 메인 메소드를 실행하면 되는데, 메인에서 하위 클래스를 up-casting 하여 객체를 생성한다. 이후 생성된 ss 라는 객체에서 sort () 메소드를 실행하면, 추상 클래스에 있던 일반 메소드가 실행되고 그 안에 재정의된 sorting() 가 실행되어 '버블정렬'이 일어난다.
블로그의 정보
개발자 미니민의 개발로그
mini_min