/*=========================
■■■클래스 고급■■■
=========================*/
// 추상 클래스(Abstract)
/*
○ 추상 클래스(abstract)는
선언만 있고 정의가 없는 하나 이상의 메소드(추상 메소드)를 갖는 클래스로
하위 클래스에서 오버라이딩(Overriding)할 것으로 예상되는 메소드에 대해
메모리 낭비 없이 미리 호출 계획을 세워두기 위해 만든다.
○ 형식 및 구조
[접근제어지시자] abstract class 클래스명
{
[접근제어지시자] abstract 자료형 메소드명([매개변수], ...);
}
○ 특징
클래스가 적어도 하나 이상의 추상 메소드를 포함할 때
그 클래스는 클래스 앞에 『abstract』키워드를 붙여
추상 클래스로 명시해야 하며,
추상 클래스로 선언한 경우에는
불완전한 형태의 클래스 이므로 객체를 생성할 수 없다.
추상 메소드가 존재하지 않는 추상 클래스마저도
객체를 생성할 수 없는 것이다.
즉, 추상 클래스는 독립적으로 존재할 수 없기 때문에
상속을 위해서만 존재하며
추상 클래스에서 상속받은 하위클래스에서는
반드시 추상 메소드를 오버라이딩(Overriding)해야 한다.
※ 『abstract』 키워드는
클래스와 메소드에서만 사용할 수 있으며
멤버 변수나 로컬 변수에는 사용 불가능 하다.
*/
// 추상 클래스
abstract class SortInt117
{
private int[] value;
protected void sort(int[] value)
{
this.value = value;
sorting();
}
protected abstract void sorting();
protected int dataLength()
{
return value.length;
}
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;
}
protected final void swap(int i, int j)
{
int temp = value[i];
value[i] = value[j];
value[j] = temp;
}
}
// SortInt117 상속받아서 추상클래스로 되었다.
// sorting() 을 Override 하면 정상으로 돌아간다.
public class Test117 extends SortInt117
{
int i, j;
static int[] data = {7, 10, 3, 8, 7};
@Override
public void sorting()
{
for (i = 0;i<dataLength()-1 ;i++ )
{
for (j=i+1;j<dataLength() ;j++ )
{
if (compare(i, j)>0)
{
swap(i, j);
}
}
}
}
public static void main(String[] args)
{
System.out.print("Source Data : ");
for (int n : data )
System.out.printf("%4d", n);
System.out.println();
Test117 ob = new Test117();
ob.sort(data);
System.out.print("Sorted Data : ");
for (int n : data )
System.out.printf("%4d", n);
System.out.println();
}
}
728x90
'JAVA' 카테고리의 다른 글
Test119.java / 클래스 고급 - 인터페이스(Interface) / 인터페이스 기본 개념 (0) | 2022.10.22 |
---|---|
Test118.java / 클래스 고급 - 상속 관계에 있는 클래스들 간의 캐스팅 / 업 캐스팅, 다운 캐스팅 (0) | 2022.10.22 |
Test116.java / 클래스 고급 - 상속 / 상속(Inheritance)을 활용한 메소드 재정의(메소드 오버라이딩, Method Overriding) (0) | 2022.10.22 |
Test115.java / 클래스 고급 - 상속 / 상속(Inheritance)을 활용한 클래스 구현 (0) | 2022.10.22 |
Test114.java / 클래스 고급 - 상속 / 상속의 기본개념2 (Inheritance) (0) | 2022.10.22 |
댓글