다시 복습해보자 ! 형변환 연산자 / 참조변수의 형변환 🐶↔️🐷

리무 rimu ·2023년 3월 8일

형(Type)변환 연산자

형변환이란?
변수 또는 상수의 타입다른 타입으로 변환하는 것

(타입)피연산자

double d = 85.4;
int score = (int)d;
int score = (int)85.4;
int score = 85;

피연산자 d(double)를 integer로 바꿔서 집어넣음

참조변수의 형변환

3.6 =>(int) 3 기본형의 형변환은 값이 바뀜

사용할 수 있는 멤버의 갯수를 조절하는 것!
그 외에는 아무것도 변하지 않음!
조상, 자손 관계의 참조변수는 서로 형변환 가능
형제들끼리는 형변환이 불가함~

class Car{}
class FireEngine extends Car{} // 소방차
class Ambulance extends Car{} // 구급차
class Car{
	String color;
    int door;
    
    void drive(){ // 운전하는 기능
     System.out.println("drive, Brrrr~");
    }
    void stop(){ // 멈추는 기능
     System.out.println("stop!!!!");
 }
class FireEngine extends Car { // 소방차
	void water(){ // 물을 뿌리는 기능
    	System.out.println("water!!!");
    }
}
FireEngine f = new FireEngine();

Car c = (Car)f;  // 가능. 조상인 Car 타입으로 형변환(생략 가능), 감소는 항상 안전함 5개 => 4개 
FireEngine f2 = (FireEngine)c; // 가능. 자손인 FireEngine타입으로 형변환(생략 불가), 증가는 안전하지않음!! 4개 =>  5개
Ambulance a = (Ambulance)f; // 에러. 상속관계가 아닌 클래스간의 형변환은 불가!!
class Ex7_7{
	public static void main(String args[]){
    	Car car = null;
        FireEngine fe = null; // 실제 인스턴스가 무엇인지 중요!
        
        FireEngine fe2 = (FireEngine)car; // 조상 => 자손으로 형변환
        Car car2 = (Car)fe2; // 자손 => 조상으로 형변환
        car2.drive(); // NullPointerException 발생!
    }
}


리모콘을 변경!!

상속에서의 업캐스팅, 다운캐스팅

업캐스팅

Parent p = new Child();

업캐스팅은 암묵적 또는 명시적으로 할 수 있다.
업캐스팅을 하면 하위클래스에만 정의된 멤버변수에는 접근할 수 없다!

다운캐스팅

child c = new Parent; (x) - 이렇게 하면 컴파일 에러가 뜬다.
//따라서 반드시 이렇게 해주어야 함.
Parent p = new Child();
Child c = (Child)p;

다운캐스팅형변환 타입을 적어줘어야 함!!

  • 다운캐스팅을 통해 상위, 하위 클래스모두 접근 가능하다.

상속의 예 - Object 클래스

java.lang.Object.class

  • 모든 클래스의 최상위 클래스

  • 어떤 클래스도 상속하고 있지 않음

  • 하위 클래스에 물려줄 보편적인 특징이 있다.

  • extends키워드를 사용하지 않더라도 JVM이 자동으로 상속되었다고 인식하므로 생략해도 된다.

  • java.lang.* 패키지도 따로 import를 안해도 JVM이 자동으로 인식한다.

  • Object 타입의 변수null, 배열, 인스턴스어떤 객체라도 참조할 수 있다.

Object 클래스의 메서드

toString, equals, clone, wait(notify, notifyAll), finalize

profile
JAVA / SQL / Spring 을 공부하고 있습니다 🐥

0개의 댓글