Java - 다형성

갓김치·2020년 8월 31일
0

자바 객체지향

목록 보기
11/13

참고

p. 151~

  • instanceof 연산자 : InstanceTest

다형성(Polymorphism)

  • 여러가지 형태를 가질 수 있는 성질
  • 부모타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.

참조변수의 형변환

  • 상속관계에서만 가능하다.
  • 모든 참조 변수는 모든 클래스의 조상인 Object 클래스 타입으로 형변환 가능
  • 변수에 저장된 값(주소)이 변환 되는 것은 아니다.
  • 사용할 수 있는 멤버의 개수를 조절하기 위해 참조변수의 형변환을 하는 것
  • 자식타입 -> 부모타입 : up-casting, 캐스트연산자 생략 가능
  • 부모타입 -> 자식타입 : down-casting, 캐스트연산자 생략 불가

장점

  • 공간을 압축하기때문에 데이터 저장에 편리하다
  • DB의 1:1관계

instanceof 연산자

  • p.155-156, InstanceTest
void doWork(Car c){
    if(c instanceof FireCar){  //1. 인스턴스의 타입을 확인
        FireCar fc = (FireCar)c; //2. 형변환
    }
}
  • 참조변수가 참조하고 있는 인스턴스의 실제타입을 알아보기 위해 사용한다.
    • 실제 인스턴스와 같은 타입의 참조변수로 형변환을 해야만 인스턴스의 모든 멤버들을 사용할 수 있다.
  • 연산결과가 true이면 검사한 타입으로 형변환이 가능하다.
  • 클래스멤버는 참조변수의 타입에 영향을 받는다. ★★
  • 참조변수의 타입에 영향을 받지 않는 것은 인스턴스메서드 뿐이다. ★★

매개변수의 다형성

  • p.157, ProductTest.java
  • 메서드 하나로 편하게!
  • 참조변수의 다형적인 특징은 매개변수에도 적용된다.

객체배열 Vector

  • p.157-8, 200-201, ProductTest.java
Vector<클래스명> item = new Vector<클래스명>();
//클래스명 생략 가능, 생략하면 object타입으로 저장
  • 배열은 한번 크기를 정하면 변경할 수 없다. 이를 해결하기위해 만들어졌다.
  • Vector 동적으로 크기가 관리되는 객체배열이다.

Vector의 메서드

  • Vector()
    • 10개의 객체를 저장할 수 있는 Vector객체를 만든다.
    • 10개이상이 되면 자동적으로 10개씩 크기가 증가
  • boolean add(Object o)
    • Vector에 객체를 추가한다.
    • 매개변수 1개짜리 2개짜리?
  • boolean remove(Object o)
    • Vector에서 객체를 삭제한다.
  • boolean isEmpty()
    • Vector가 비어있는지 확인한다.
  • Object get(int index)
    • index번째 객체를 가져온다.
    • 반환타입: Object이므로 적절한 형변환 필요!
  • int size()
    • 저장된 객체의 개수를 반환한다.
profile
갈 길이 멀다

0개의 댓글