7.8.1 다형성(polymorphism)
- 여러 가지 형태를 가질 수 있는 능력
- 부모 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있는 것
Parent p = new Child();
- 다형성을 사용하는 경우 부모의 타입 참조변수는 자식에서 선언한 멤버 사용 불가
class Parent{
int a;
}
class Child extends Parent{
int b;
}
Parent p = new Child();
p.a //가능
p.b //불가
7.8.2 참조변수의 형변환
- 자식 → 부모(Up-casting) : 형변환 생략가능
- 자식 ← 부모(Down-casting) : 형변환 생략불가
class Car{}
class FireEngine extends Car{
void water(){};
}
class Abulancce extends Car{}
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = new FireEngine();
car = fe //업 캐스팅
fe2 = (FireEngine)car; //다운 캐스팅
//Error
car.water();
/*
참조변수 car안에는 water가 없기 때문에 사용 불가
*/
7.8.3 instanceof 연산자
- 참조변수가 참조하고 있는 인스턴스의 실제 타입 검사
- boolean값 반환
void do(Car c){
if(c instanceof FireEngine){
FireEngine fe = (FireEngine )c;
}else{}
}
7.8.4 매개변수의 다형성
- 매개변수에 부모 클래스를 할당하고 다형성을 통해 코드 간결화
class Product{
int price;
Product(int price){
this.price = price;
}
}
class Tv extends Product{
Tv(){
super(100);
}
}
class Audio extends Product{
Audio(){
super(200);
}
}
class Buyer{
int buy(Product p){
count = p.price;
return count;
}
}
class Test{
public static void main(String[] args){
Tv t = new Tv();
System.out.println(new Buyber().buy(t))
}
}
7.8.5 Vector 클래스
- 동적 객체배열
- Vector 클래스를 객체 배열을 컨트롤
- Vector 클래스는 내부적으로 Object타입의 배열을 가지고 있어서, 객체의 추가 및 제거 가능
- 생성자 및 메서드
- Vector()
- boolean add(Object o)
- boolean remove(Object o)
- boolean isEmpty()
- Object get(int index)
- in size()
'자바의 정석 정리' 카테고리의 다른 글
자바의 정석 - 7.10 인터페이스 (0) | 2022.06.13 |
---|---|
자바의 정석 - 7.9 추상 클래스 (0) | 2022.06.13 |
자바의 정석 - 7.7 제어자 (0) | 2022.06.13 |
자바의 정석 - 7.6 Import (0) | 2022.06.13 |
자바의 정석 - 7.5 패키지 (0) | 2022.06.13 |