주어진 유형의 변수 하나로 여러 유형의 객체를 참조하고 , 변수가 참조하는 객체 유형에 맞는 메소드를 자동으로 호출할 수 있는것
즉
다형성을 이용하면 메소드 호출 하나가 호출이 적용되는 객체의 유형에 따라 서로 다르게 작동하도록 할 수 있다.
다형성이 구현되기 위한
조건
- 서브클래스의 객체의 메소드 호출은 수퍼클래스 유형의 변수를 통해서
Book selectedBook;
Random select = new Random();
for(int i=0;i<10;i++) {
selectedBook = theBooks[select.nextInt(theBooks.length)];
System.out.println("\n ***** 선택한 책 ***** \n" + selectedBook);
selectedBook.display();
}
호출된 메소드는 수퍼클래스의 메소드
수퍼클래스와
서브클래스에서 메소드 유형및 리턴값이 같아야 한다.
메소드 접근제한은 서브클래스가 수퍼클래스 보다 덜 제한적이어야 한다.
import java.util.Random;
class Book {
public Book(String aType)
{ type = new String(aType); }
public String toString() { return "이것은 " +
type; }
public void display() { }
private String type;
}
class EngBook extends Book {
public EngBook(String aName) {
super("영어책...");
name = aName;
}
public void display() {
System.out.println("이 책은 영어를 공부하는데 쓰입니다...");}
public String toString() {
return "책 제목은 : " + name ; }
private String name;
}
class
JavaBook extends Book {
public JavaBook(String aName) {
super("자바책...");
name = aName;
}
public void display() {
System.out.println("이 책은
자바언어를 공부하는데 쓰입니다...");
}
public String toString() {
return "책 제목은 :
" + name ;
}
private String name;
}
public class
MyPolymorphism {
public static void main(String[] args) {
Book[]
theBooks = {
new EngBook("English Alive..."),
new JavaBook("자바정복하기..."),
new JavaBook("자바30일완성..."),
new
EngBook("영어박살내기...")
};
Book selectedBook;
Random select = new
Random();
for(int i=0;i<10;i++) {
selectedBook =
theBooks[select.nextInt(theBooks.length)];
System.out.println("\n ***** 선택한
책 ***** \n" + selectedBook);
selectedBook.display();
}
}
}
댓글 없음:
댓글 쓰기