본문 바로가기

자바/클래스

abstract 클래스

예제)


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