예제)
public class Test6 {
public static void main(String[] args) {
int[] value={25,65,32,84,75};
SelectionSort ss=new SelectionSort();
ss.sort(value);
for(int n: value)
System.out.println(n+" ");
System.out.println();
int[] data={66,85,7,53,55};
SortInt bs=new BubbleSort();
bs.sort(data);
for(int n: data)
System.out.println(n+" ");
System.out.println();
}
}
/*
* abstract 클래스
* abstract 클래스는 선언만 있고 정의가 없는 메소드를 포함하는 클래스로 호출계획을 메모리낭비 없이 미리 설계
* 클래스가 미완성된 상태로 abstract 메소드를 포함하면 반드시 클래스는 abstract 클래스(15번줄)로 작성 해야한다.
* abstract 메소드가 없어도 abstract 클래스를 만들 수 있다.
* abstract 클래스는 미완성된 상태이므로 객체를 생성할 수 없다.
* abstract 클래스를 상속 받은 클래스(자식)가 abstract 클래스가 아닌 경우 abstract 메소드를 반드시 재정의(sub 클래스에서)하거나 완성(super클래스에서)해야 한다.
* abstract 클래스를 상속 받은 클래스는 abstract 클래스로 만듬?
*/
abstract class SortInt{ // abstract 메서드가 포함되어있는 abstract 클래스
private int []arr;
protected final void swap(int i, int j) {
int temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
protected final int compare(int i, int j){
if(arr[i]>arr[j])
return 1;
else if(arr[i]<arr[j])
return -1;
return 0;
}
protected int length(){
if(arr!=null)
return arr.length;
return 0;
}
abstract protected void sorting(); //abstract 메서드
public void sort(int [] value){
this.arr=value;
sorting();
}
}
class SelectionSort extends SortInt { // 하위클래스를 만들기 위해서 상위클래스의 abstract 메서드를 재정의
@Override
protected void sorting() { // 상위클래스의 abstract protected void sorting 메서드를 재정의함.
for(int i=0; i<length()-1; i++) {
for(int j=i+1; j<length(); j++){
if(compare(i,j) > 0)
swap(i,j);
}
}
}
}
class BubbleSort extends SortInt { // 하위클래스 // 버블정렬이 셀렉션정렬보다 빠르다.
@Override
protected void sorting() { // 상위클래스의 abstract protected void sorting 메서드를 재정의함.
int pass=1;
boolean flag;
do{
flag=false;
for(int i=0; i<length()-pass; i++) {
if(compare(i,i+1)>0){
swap(i,i+1);
flag=true;
}
}
pass++;
}while(flag);
}
}
abstract class BubbleSortt extends SortInt{ // 하위클래스에 abstract를 붙이면 에러나지 않는다
}
class BubbleSorttt extends SortInt{ // 이클립스에서 에러표시 누르면 내용을 빼고 abstract 메서드를 불러와서 재정의하라고 한다.
@Override
protected void sorting() {
}
}
결과)
25
32
65
75
84
7
53
55
66
85
'자바 > 클래스' 카테고리의 다른 글
내부클래스 (0) | 2013.05.21 |
---|---|
인터페이스 interface (0) | 2013.05.21 |
상속 super (0) | 2013.05.21 |
Scanner 클래스 (0) | 2013.05.19 |
SimpleDateFormat (0) | 2013.05.19 |