본문 바로가기

IT/Java

2013.01.11. Java 형변환, final, 추상클래스




2013.01.11. Java 형변환, final, 추상클래스


오브젝트 형변환(Cast)

 - 부모 클래스로부터 상속을 받을 경우 데이터형태까지 승계

 - 메서드 오버라이딩의 제정을 통한 다형성의 구현


메서드 오버라이딩(Method Overriding)

 - 자식 클래스에서 사용하기 위해 부모 클래스에서 정의한 메서드를 재정의.

 - 메서드명을 포함한 메서드 시그니쳐를 부모 클래스에서와 동일하게 선언.

 - super.메서드명 : 부모 클래스의 해당 메서드를 호출하기 위한 명령문.

 - 자식 클래스에 오버라이딩된 메서드가 존재할 경우, 메서드를 호출시 언제나 원본 메서드가 아닌 오버라이딩된 메서드를 호출한다.

Java의 Interface의 의미를 이해하는데 매우 중요하다.

final 키워드의 활용

 - final + 클래스 : 해당 클래스는 더 이상 상속할 수 없음.

 - final + 메서드 : 해당 메서드는 더 이상 오버라이딩할 수 없음.

 - final + 변   수 : 해당 변수값은 더 이상 변경할 수 없음.


부모 클래스로의 오브젝트 형변환

 - 데이터 형태의 제한을 극복하기 위해.

 - 제약사항 : 부모 클래스로 형변환이 이루어지는 순간, 상속받은 변수 및 오버라이딩된 메서드 외 접근이 불가능해진다.

단, 자식 클래스의 멤버변수 중 오버라이딩 메서드 내에서 호출한 변수는 사용 가능하다.

 - ex) A b = new B();

- B b = new B();    : B 클래스의 객체 생성

- A a = b;              : A 클래스의 타입으로 형변환


강제형변환(Cast)의 활용 (형변환 대상 레퍼런스 타입)레퍼런스 변수

 - 올바른 ex) Account object1 = new CheckingAccount();

 CheckingAccount object2 = (CheckingAccount)object1;

 - 잘못된 ex) Account object1 = new Account();

 CheckingAccount object2 = (CheckingAccount)object1;

  ※ 오브젝트 형변환을 통해 부모 클래스의 타입으로 형변환이 이루어진 상황에서만

캐스팅을 통해 다시 자식 클래스의 타입으로 강제형변환이 가능하다.


instanceof 연산자

 - 강제형변환이 가능한지 판별해주는 역할을 수행.

 - 응용하여, 해당 클래스가 특정 interface를 구현하고 있는지 확인 가능.

 - 결과값으로 true / false를 리턴.

 - ex) if(array[23] instanceof FriendPhoneInfo) { … }


추상 클래스(Abstract Class)

 - 자식 클래스에서 부모 클래스의 기능의 구현을 강제하기 위해서 존재.

 - 본체가 없는, 추상 메서드만 존재하는 클래스.

+ 상속시 부모 클래스의 추상 메서드를 오버라이딩하지 않으면 에러가 발생.

 - 추상 클래스는 실체가 없기 때문에 new 연산자로 객체를 생성할 수 없다.