다운 캐스팅
만약, Animal 클래스의 자식 클래스에 Cat, Dog, Bird가 있다고 가정할 때
Animal animal = new Human();
위와 같이 Animal 변수 선언에 Human 객체를 생성하면 Human이 Animal으로 묵시적 형변환이 일어나게 된다.
그러나 이 animal 변수를 다시 Human 형식으로 변환하는 때가 필요할 수 있다,
이 처럼 다시 원래의 자료형으로 형변환 하는 것을 다운 캐스팅 이라고 한다.
instanceof
다운 캐스팅을 하기 전에 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인해야 다시 원래 자료형으로 변형할 때의 오류를 막을 수 있다.
만약 위의 예시처럼 Human 클래스가 Animal 클래스로 변형 되었을 때, 이 때 사용된 animal 인스턴스를 다시 Human 형으로 변형할 수 있을 것이다.
이 때, 이 animal 인스턴스가 Animal의 다른 하위 클래스인 Cat, Dog으로 변환되지 않도록 만드는 작업이 필요할 것이다.
이 때 사용되는 것이 바로 instanceof이다.
위와 같은 클래스가 있을 때
이 처럼 instanceof를 이용하여 어느 클래스에서 변형된 것인지를 판단할 수 있다.
Abstract Class (추상 클래스)
추상 클래스란 구체화 되지 않은 클래스로, 구현 코드가 존재하지 않고 추상 메서드를 포함하게 된다.
추상 클래스의 선언 방법은 아래와 같다.
public abstract class Example {
// field
// constructor
// method
}
Abstract Method (추상 메서드)
{ } 를 포함하지 않고, 선언 방법은 아래와 같다.
public abstract int example(int parameter);
이런 식으로 구체적으로 구현을 하지 않고, 접근제어자, 반환형, 함수명, 매개변수만 미리 선언을 해둔다.
Sealed classes
sealed 를 이용하여 상속이 가능한 클래스를 정해두는 것이다.
형식은 아래와 같다.
public sealed class A permits B, C {
// 내용
}
A를 이런식으로 구현을 해두면, B와 C만 A로부터 상속 받을 수 있다는 뜻이다.
이런식으로 상속을 받을 수 있는 클래스를 미리 정의해 둔다.
참고로 B와 C는 final class 혹은 non-sealed 클래스여야 A로부터 상속을 받을 수 있다.
- final: 해당 클래스는 다른 클래스에게 상속할 수 없다
- non-sealed: 말 그대로 sealed를 해제하여 다른 클래스에게 상속 할 수 있도록 만든다는 의미
위의 예시에서 C가 non-sealed이기 때문에 C를 다른 클래스들에게 상속할 수 있다.
위의 예시와 같은 상황에서
'CS > Java' 카테고리의 다른 글
[Java] interface 인터페이스 메서드 종류(default, static, private) (0) | 2024.05.26 |
---|---|
[Java] interface 인터페이스 (0) | 2024.05.26 |
[Java] 상속 Inheritance - 3 (Type Conversion 형변환, Polymorphism 다형성) (0) | 2024.04.15 |
[Java] 상속 Inheritance - 2 (Final Class, Final Method, protected 제어자) (0) | 2024.04.15 |
[Java] 상속 Inheritance - 1 (extends, super) (0) | 2024.04.06 |