다형성이란?
: 여러 가지 형태를 가질 수 있는 능력
: 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함
-> 조상클래스의 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 함.
상속관계에 있을 경우, 조상 클래스의 타입의 참조변수로 자손 클래스의 인스턴스를 참조하도록 하는 것이 가능
Tv t = new CaptionTv();
CaptionTv c = new CaptionTv();
Tv t = new CaptionTv();
- 둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다.
조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
참조변수의 형변환
- 상속 관계에 있는 클래스사이에서만 가능.
[참조변수] instanceof [타입(클래스명)]
자손타입 -> 조상타입 | 형변환 생략가능 |
자손타입 <- 조상타입 | 형변환 생략불가 |
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
car = fe; // car = (Car)fe; 에서 형변환 생략 (업캐스팅)
fe2 = (FireEngine)car; // 형변환 생략불가 (다운캐스팅)
- 참조변수 형변환은 인스턴스에 아무런 영향을 미치지 않는다.
- 단지 멤버의 개수를 조절하는 것 뿐이다.
instanceof 연산자
: 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용
어떤 타입에 대한 instanceof연산의 결과가 true라는 것은 검사한 타입으로 형변환이 가능하다는 것을 뜻한다.
참조변수와 인스턴스의 연결
* 멤버변수가 조상클래스와 자손 클래스에 중복으로 정의된 경우
- 조상타입의 참조변수 사용했을 경우 -> 조상 클래스에 선언된 멤버변수가 사용
- 자손타입의 참조변수 사용했을 경우 -> 자손 클래스에 선언된 멤버변수가 사용
매개변수의 다형성
class Product {
int price;
int bonusPoint;
Product(int price) {
this.price = price;
bonusPoint = (int)(price/10.0);
}
class Tv extends Product {
Tv() {
super(100);
}
public String toString() {
return "Tv";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Buyer {
int money = 1000;
int bonusPoint = 0;
void buy(Product P) {
money = money - p.price;
bonusPoint = bonusPoint + p.bonusPoint;
}
}
class PolyArgumentTest {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
}
}
여러 종류의 객체를 배열로 다루기
product p1 = new Tv();
product p2 = new Computer();
product p3 = new Audio();
//
Product p[] = new Product[3];
p[0]= new Tv();
p[1]= new Computer();
p[2]= new Audio();
메서드 / 생성자 | 설명 |
Vector() | 10개의 객체를 저장할 수 있는 Vector인스턴스 생성 10개 이상의 인스턴스가 저장되면, 자동적으로 크기 증가 |
boolean add(Object o) | Vector 객체를 추가한다. 성공하면 true, 실패하면 false 반환 |
boolean remove(Object o) | Vector에 저장되어 있는 객체를 제거 성공하면 true, 실패하면 false 반환 |
boolean isEmpty() | Vector가 비어있는지 검사 비어있으면 true, 아니면 false 반환 |
Object get(int index) | 지정된 위치(index)의 객체를 반환 Object타입이므로 적절한 형변환이 필요 |
int size() | Vector에 저장된 객체의 개수 반환 |
//Ex
Vector item = new Vector();
'Language > java' 카테고리의 다른 글
Java_Study 객체지향 프로그래밍_인터페이스 (0) | 2022.07.07 |
---|---|
Java_Study 객체지향 프로그래밍_추상클래스 (0) | 2022.07.07 |
Java_Study 객체지향 프로그래밍_제어자(modifier) (0) | 2022.07.06 |
Java_Study 객체지향 프로그래밍 (패키지) (0) | 2022.07.04 |
Java_Study 객체지향 프로그래밍 (오버라이딩) (0) | 2022.07.04 |
댓글