그냥
Published 2023. 3. 18. 01:40
6. 상속(3) JAVA 공부/객체지향 공부

클래스 형변환

자식을 부모에 대입하는 건 안전하지만

부모를 자식에 대입하는 건 되는 경우, 안되는 경우도 있지만 일단 컴파일에서 막아버린다.

 

자식을 부모에게 대입하는건 암시적 형변환이다.

cat cat1 = new cat(“Rubi”, 2, “female”);
animal animal = cat1;

위와 같이 작성 해도 컴파일러가 animal animal = (animal)cat1; 로 작성한 것처럼 해준다.

 

반대로 부모를 자식에게 대입하려면 명시적 형변환을 해야한다.

cat cat1 = new cat(“Rubi”, 2, “female”);
animal animal = cat1;

cat cat2 = (cat)animal;

 

이때 cat cat2 = (cat)dog; 같은 코드는

상속 관계가 아니기에 형변환을 허용하지 않는다.

부모, 자식 관계는 가능하지만 형제 관계는 가능하지 않다.

instanceof

객체가 특정 클래스의 인스턴스인지 판단하는 연산자가 instanceof 연산자 이다.

클래스간 형변환이 가능한지 여부를 확인할 수 있으며, ture / false로 결과값이 나온다.

 

사용방법은 : 변수명 instanceof 클래스명

public class Main {
    public static void main(String[] args) {
        dog dog1 = new dog("B",4,"male");
	cat cat1 = new cat("A",3,"female");
        System.out.println( dog1 instanceof animal ); //true
	System.out.println( cat1 instanceof animal ); //true
	System.out.println( cat1 instanceof Object ); //true
    }
}

class animal{
     ( . . . )
    }
}

class dog extends animal{
     ( . . . )
    }
}

class cat extends animal{
     ( . . . )
    }
}

animal의 자식 클래스로 생성된 인스턴스인 dog1, cat1라 부모클래스인 animal로 형변환이 가능하기에 true로 출력

.getClass()

변수명.getClass()

instanceof 연산자와 비슷한 기능을 가진 메서드이다.

실행 중에 객체의 클래스 정보를 얻어올 수 있으며, 주로 클래스의 이름을 찾을 때 사용한다.

.getClass().getName()

변수명.getClass().getName()

클래스명을 반환해준다. 이때 클래스명은 패키지 경로까지 포함한다.

주로 로그(log) 메시지를 출력할 때 사용한다.

Object 클래스

모든 클래스의 부모로는 Object 클래스가 있다.

부모가 없는 클래스는 자동으로 Object 클래스를 상속받게 된다.

Object 클래스를 상속받으니 Object의 메서드들도 같이 딸려와 사용할 수 있다.

그 이유로 인해 Object 클래스의 메서드인 getClass(), getName() 같은 메서드들을 사용할 수 있는 것이다.

 

 

이렇게 클래스를 재사용하면 설계와 코딩 시간을 절약할 수 있는 장점이 있지만,

프로그램이 미래에 어떻게 변할지 완전히 예측이 불가하기에

재사용성만 보다가 잘못된 클래스를 사용할 수도 있는 단점이 있다.

'JAVA 공부 > 객체지향 공부' 카테고리의 다른 글

7. 다형성  (0) 2023.03.26
5. 상속 (2)  (0) 2023.03.18
4. 상속 (1)  (0) 2023.03.18
4. getter와 setter  (0) 2023.03.13
3. 생성자  (0) 2023.03.13
profile

그냥

@Ticketpaper

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그