● 추상 클래스(Abstract Class)는 선언만 있고 정의가 없는 하나 이상의 메소드(추상메소드)를 갖는
클래스로 하위 클래스에서 오버라이딩(Overriding)할 것으로 예상되는 메소드에 대해 메모리 낭비
없이 미리 호출 계획을 세워두기 위해 만든다.
● 형식 및 구조
[ 접근제어지시자 ] abstract class 클래스명
{
[ 접근제어지시자 ] abstract 자료형 메소드명([매개변수], ....)
}
● 특징
클래스가 적어도 하나 이상의 추상 메소드를 포함할 때 그 클래스는
클래스 이름 앞에 『abstract』 키워드를 붙여 추상 클래스로 명시해야 하며,
추상 클래스로 명시해서 선언한 경우에는 불완전한 형태의 클래스이므로 객체를 생성할 수 없다.
추상 메소드가 존재하지 않는 추상 클래스마저도 객체를 생성할 수 없는 것이다.
즉, 추상 클래스는 독립적으로 존재할 수 없기 때문에 상속을 위해서만 존재하며,
추상 클래스에서 상속받은 하위 클래스에서는 반드시 추상 메소드를 오버라이딩(Overriding) 해야 한다.
※ 『abstract』 키워드는 클래스와 메소드에서만 사용할 수 있으며 멤버 변수나 로컬 변수에서는 사용 불가능하다.
abstract class SortInt
{
private int [] value;
protected void sort(int[] value)
{
this.value = value;
sorting();
}
// 추상 메소드(abstract)
protected abstract void sorting();
protected int dataLength()
{
return value.length;
}
// 컴페어 메소드는 크기 비교 메소드
//final 키워드로 인해 이 클래스를 상속받는 클래스에서 이 메소드를 재정의할 수없다.
protected final int compare(int i, int j)
{
int x = value[i];
int y = value[j];
if (x==y)
return 0;
else if (x>y)
{
return 1;
}
else
return -1;
}
// 자리바꿈 기능 메소드
// final로 인해 이 클래스를 상속받는 클래스에서 적어도 이 메소드 만큼은 오버라이딩 해서 사용하지 말아라! 라는 의미 전달
protected final void swap(int i, int j)
{
int temp = value[i];
value[i] = value[j];
value[j] = temp;
}
}
//SortInt(추상클래스)를 상속받은 클래스→ 추상클래스가 되어 abstract 붙여줘야함 → 추상메소드재정의 /오버라이딩 → 일반정상클래스 → abstract삭제
public /*abstract*/ class Test110 extends SortInt
{
int i,j;
static int[] data = {7, 10, 3, 8, 15};
//-----------------------------------------------
@Override
protected void sorting()
{
for (i=0; i<dataLength()-1; i++) // i/j → 0/1234 1/234 2/34 3/4
{
for (j=i+1; j<dataLength(); j++)
{
if (compare(i,j) > 0) //크기비교(정렬기준)
swap(i,j); //자리바꿈
}
System.out.print((i+1) + "Round Data : ");
for (int n : data )
{
System.out.print(n + " ");
}
System.out.println();
}
}
//-----------------------------------------------
public static void main(String[] args)
{
System.out.print("Source Data : ");
for (int n : data)
System.out.print(n + " ");
System.out.println();
Test110 ob = new Test110();
ob.sort(data);
/* protected void sort(data)
{
this.value = data;
sorting();
}
*/ System.out.print("Sorted Data : ");
for (int n: data)
System.out.print(n + " ");
System.out.println();
}
}
/*
Source Data : 7 10 3 8 15
1Round Data : 3 10 7 8 15
2Round Data : 3 7 10 8 15
3Round Data : 3 7 8 10 15
4Round Data : 3 7 8 10 15
Sorted Data : 3 7 8 10 15
계속하려면 아무 키나 누르십시오 . . .
'📚Study Note > JAVA' 카테고리의 다른 글
[ JAVA ] 클래스 고급 - 인터페이스(Interface) (0) | 2021.03.29 |
---|---|
[ JAVA ] 클래스 고급 - 상속 관계에 있는 클래스들 간의 캐스팅 ( 업 캐스팅, 다운 캐스팅 ) (0) | 2021.03.29 |
[ JAVA ] 클래스 고급 - 상속 (Inheritance) ④ (0) | 2021.03.27 |
[ JAVA ] 클래스 고급 - 상속 (Inheritance) ③ (0) | 2021.03.27 |
[ JAVA ] 클래스 고급 - 상속 (Inheritance) ② (0) | 2021.03.27 |