본문 바로가기
Work & Study/JAVA (& 혼공자Java)

자바(Java) - 타입 변환과 다형성

by a.k.a DUKI 2020. 11. 2.
728x90
반응형

저번과 같이 자바 프로그램을 개발할때 가장 중요한 기술적인 요소 중 하나인 다형성 이다. 저번 절의 재정의를 제대로 이해하고 넘어가는 것이 좋을 것같다.

dustink.tistory.com/61

 

자바(Java) - 상속3 (메소드 재정의)

자바 프로그램을 개발할때 가장 중요한 기술적인 요소 중 하나인 메소드 재정의 이다. 메소드 재정의(오버라이딩 overriding) 부모 클래스의 메소드가 자식 클래스에서 사용하기에 부적합할 경우

dustink.tistory.com

 

다형성은 사용방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질이다.

다형성을 구련하려면 메소드 재정의와 타입 변환이 필요하다.

혼공자 유툽 참고

 

자동 타입 변환

프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다.

 

혼공자 유툽 참고

class Animal{ ... }

------------------------------

class Cat extends Animal { ... } 

----------------------------------

Cat cat = new Cat();
Animal animal = cat;
Animal animal new Cat(); //가능

 

혼공자 유툽 참고

//cat과 animal은 동일한 객체를 참조하고 있다.
cat == animal; //true

 

바로 위의 부모가 아니더라도 상속 계층에서 상위 타입이라면 자동 타입 변환이 일어날 수 있다.

혼공자 유튭 참고

 

예시1) 자동 타입 변환

class A{}

class B extends A{}
class C extends A{}

class D extends B{}
class E extends C{}


public class PromotionEx {

	public static void main(String[] args) {
		B b = new B();
		C c = new C();
		D d = new D();
		E e = new E();
		
		A a1 = b;
		A a2 = c;
		A a3 = d;
		A a4 = e;
		
		B b1 = d;
		C c1 = e;
		
//		상속 관계에 있지 않기 때문에 컴파일 에러 발생
//		B b3 = e;
//		C c2 = d;
	}

}

 

부모 타입으로 자동 타입 변환 이후에는 부모 클래스에 선언된 필드 및 메소드만 접근이 가능하다.

예외적으로, 메소드가 자식 클래스에서 재정의될 경우 자식 클래스의 메소드가 대신 호출된다.

혼공자 유툽 참고

Child 객체는 method3() 메소드를 가지고 있지만, Parent타입으로 변환된 이후에는 method3()을 호출 할 수 없다.

그러나 method2()메소드는 부모, 자식 모두에게 있어, 재정의된 메소드는 타입 변환 이후에도 자식 메소드가 호출 된다.

 

 

예시2) 자동 타입 변환 후의 멤버 접근

public class Parent {
	public void method1() {
		System.out.println("Parent-method1()");
	}

	public void method2() {
		System.out.println("Parent-method2()");
	}
}

자동 타입 변환 후의 멤버 접근

 

public class Child extends Parent {
	//재정의
	@Override
	public void method2() {
		System.out.println("Child-method2()");
	}

	public void method3() {
		System.out.println("Child-method3()");
	}

}

자동 타입 변환 후의 멤버 접근

 

public class ChildEx {

	public static void main(String[] args) {
		Child child = new Child();

		Parent parent = child; // 자동 타입 변환
		parent.method1();
		parent.method2(); // 재정의된 메소드가 호출
		// parent.method3(); --> 타입 변환되어 호출 불가

	}
}

 

 

 

 

 


※용어 정리

  • 클래스 타입 변환: 다른 클래스 타입으로 객체를 대입하는 것

  • 자동 타입 변환: 자식 객체를 부모 타입 변수에 대입할 때에는 자동으로 타입이 변환 된다.

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.

 

728x90
반응형