쌓고 쌓다

[JAVA] 업 캐스팅, 다운 캐스팅 / instanceof 연산자 본문

프로그래밍/java

[JAVA] 업 캐스팅, 다운 캐스팅 / instanceof 연산자

승민아 2021. 12. 25. 20:47

업 캐스팅

class Person
{
    String name;
    int age;
}

class Student extends Person
{
    String grade;

}

public class Main{

    public static void main(String[] args) {

        Person person;
        Student student = new Student();
        person = student; // 업 캐스팅

    }
}

서브 클래스(자식)는 슈퍼 클래스(부모)의 모든 멤버를 가지기 때문에,

서브 클래스의 객체를 슈퍼클래스의 객체로 취급이 가능하다.

즉, 업 캐스팅은 슈퍼 클래스의 레퍼런스로 서브 클래스의 객체를 가리키게 하는 것이다.

하지만, 업 캐스팅한 레퍼런스로 모든 멤버에 접근은 불가능하고 슈퍼 클래스의 멤버에만 접근이 가능하다.

        Person person;
        Student student = new Student();
        person = student; // 업 캐스팅
        person.age = 999; // 오류 없음
        person.grade = "A+"; // 컴파일 에러, 슈퍼 클래스 레퍼런스로 서브 클래스에 접근 불가

 

다운 캐스팅

업 캐스팅과 반대이다.

class Person
{
    String name;
    int age;
}

class Student extends Person
{
    String grade;

}

public class Main{

    public static void main(String[] args) {

        Person person = new Student(); // 업 캐스팅
        Student student;
        student = (Student) person; // 다운 캐스팅, (Student) 변환을 반드시 명시
    }
}

서브 클래스에 대한 레퍼런스로 슈퍼 클래스의 객체를 가리키는 것이다.

단, 다운 캐스팅의 경우 형 변환 ( 타입의 변환 )을 반드시 명시해야 한다.

 

instanceof 연산자

레퍼런스 instanceof 클래스명

instanceof는 이항 연산자이다.

결과 값으로 boolean 값을 반환한다.

'레퍼런스'가 가리키는 객체가 해당 '클래스' 타입의 객체면 true 아니면 false를 반환한다.

class Person
{
    String name;
    int age;
}

class Student extends Person
{
    String grade;

}

public class Main{

    public static void main(String[] args) {

        Student student = new Student();
        Person person = new Person();

        System.out.println(student instanceof Person);
        System.out.println(student instanceof Student);
        System.out.println();
        System.out.println(person instanceof Person );
        System.out.println(person instanceof Student );

    }
}

실행 결과

Comments