재훈재훈
파라미터의 다형성 본문
파라미터의 다형성
- 파라미터가 참조형일 경우, 메서드 호출 시 자신과 같은 타입,
또는 자손 타입의 인스턴스를 넘겨줄 수 있다.
소스 출처 - 부경대 권오흠 교수님, <JAVA로 배우는 자료구조> 강의
예제)
public interface Comparable { ← 인터페이스 Comparable
int compareTo(Object o );
}
public abstract class Shape implements Comparable {
... ← Comparable를 구현한 추상클래스 Shape
public int compareTo(Object obj) {
double mine = this.computeArea();
double yours = ((Shape)obj).computeArea();
if (mine < yours)
return -1;
else if (mine==yours)
return 0;
else
return 1;
}
... ...
}
public class RtTriangle extends Shape {
... ← 추상클래스 Shape를 상속받은 클래스 RtTriangle
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Shape Program - 사각형, 원, 직각삼각형 등의 도형을 입력받아 저장하고 면적과 둘레, 길이 등을 보여주기도 함
bubbleSort(Comparable[] data, int size) - 도형배열(Shapes)에 있는 각 도형(Shape)의 넓이를 계산해서 넓이 순으로 정렬하는 메서드
processCommand() - 본 프로그램에서 사용자 입력을 받아 프로세스를 진행시키는 함수
public void bubbleSort(Comparable [] data, int size) {
for ( int i=size-1; i>0; i-- ) {
for (int j=0; j<i; j++) {
if ( data[j].compareTo(data[j+1]) > 0 )
{
Comparable tmp = data[j];
data[j] = data[j+1];
data[j+1] = tmp;
}
}
}
}
public void processCommand() {
while(true) {
System.out.print("$ ");
String command = kb.next();
if (command.equals("add"))
handleAdd();
else if (command.equals("show") || command.equals("showdetail"))
handleShow( command.equals("showdetail") );
else if (command.equals("sort"))
bubbleSort(shapes, n);/ //private Shape [] shapes = new Shape [capacity]; shape형 배열 변수
else if (command.equals("exit"))
break;
}
bubble Sort()의 첫번째 매개변수의 타입이 shape가 아니라 comparable인 이유 - 다형성
shape 클래스가 comparable 인터페이스를 구현했기 때문!
comparable 인터페이스(참조변수)를 매개변수로 받으면서 Bubble Sort 함수는
generic한 특성을 갖게 된다.
인터페이스도 다형성의 영향을 받는다.
'Computer Engineering > JAVA' 카테고리의 다른 글
OODP - Singleton Pattern (0) | 2018.04.07 |
---|---|
제네릭(Generic) (0) | 2018.04.07 |
추상클래스와 인터페이스 (0) | 2018.04.07 |
다형성과 동적 바인딩 (0) | 2018.04.07 |
상속과 생성자 (0) | 2018.04.07 |