티스토리 뷰

★ 기본 타입의 형 변환

 

☆ 자동 형 변환 ( implict type conversion, 암시적 형 변환)

 

값의 표현 범위가 좁은 타입 ▶ 넓은 타입으로 변환 시, 데이터의 손실이 없기 때문에 자동 형 변환이 이루어짐.

 

1. byte ▶ int : 자동 형 변환 가능

2. char ▶ int : 자동 형 변환 가능

3. int ▶ float : 자동 형 변환 가능

4. float ▶ double : 자동 형 변환 가능

5. float ▶ long : 자동 형 변환 불가

 

☆ 명시적 형 변환 ( Explict Type Conversion)

출력 화면

1. int ▶ byte 는 에러가 발생한다. 소괄호를 이용하여 (byte) 입력하면 된다. 단, 데이터 손실이 발생한다.

2. int ▶ byte 는 에러가 발생한다. 소괄호를 이용하여 (byte) 입력하면 된다. 손실이 발생하지 않는다.

           byte는 127까지 활용할 수 있기 때문이다.

3. int ▶ byte는 에러가 발생한다. 소괄호를 이용하여 (byte) 입력하면 된다. 오버플로우 때문에 -128이 출력된다. 


★ 다형성 ( Polymorphism)

- 다형성의 사전적 정의는 

  다양한 형태를 가질 수 있는 성질, 여러 형태를 가질 수 있는 속성이나 능력이다. 

 

  클래스의 다형성은 

  한 타입의 참조 변수로 여러 타입의 객체(인스턴스)를 참조할 수 있도록 구현하는 것이다. 

 

  다형성의 장점

- 유연하면서도 구조화된 코드를 구현하여 확장성 있고 유지보수하기 좋은 프로그램을 개발할 수 있다.

  각 자료형에 따라 코드를 다르게 구현한다면 코드는 훨씬 복잡해지고, 내용도 길어진다.

  상위 클래스에서 공통 부분의 메서드를 제공하고,  

  하위 클래스에서는 그에 기반한 추가 요소를 덧붙여 구연하면 코드 양도 줄어들고 유지보수도 편리하다. 

 

 

※ 전의 '상속' 게시글 App.java / Animal.java / Mouse.java 과 함께한다.

 

1. Animal 타입의 anAnimal 인스턴스를 생성한다.

 

2. Mouse 타입의 mickey 인스턴스를 생성했다.

   하위 클래스인 Mouse 타입의 인스턴스를 상위 클래스인 Animal 타입의 참조변수에 대입했다.

   하위 타입에서 상위 타입으로 형 변환은 자동이다. 

 

3. name은 상위 클래스 Animal의 멤버이기 때문에 사용 가능하다.

   상위 타입의 참조 변수 (Animal mickey)로 하위 타입의 멤버(address) 사용 불가하다.

 

4. showName은 상위 타입(Animal)의 참조 변수지만, 오버 라이딩이 되었기 때문에 예외적으로 사용이 가능하다.

 

5. Mouse 클래스에 showAddr( ) 메서드를 추가했다.

    하지만, 상위 타입의 참조 변수(Animal mickey)로 하위 타입의 멤버 (showAddr()) 사용 불가하다. 

 

 

package com.overriding;

public class App {

	public static void main(String[] args) {
		Animal someAnimal = new Animal();
		someAnimal.name = "어떤 동물";
		someAnimal.showName();
		System.out.println();
		
		Mouse jerry = new Mouse();
		jerry.name = "제리";
		jerry.address = "하와이";
		
		jerry.showName();
		
		jerry.showName("톰");
		
		// 다형성 (Polymorphism)
		Animal anAnimal = new Animal();
//		Mouse mickey = new Mouse();
		Animal mickey = new Mouse(); // 하위 클래스인 Mouse타입의 인스턴스를 상위 클래스인 Animal 타입의 참조변수에 대입
		// 하위 타입에서 상위 타입으로 형 변환은 자동
		
		mickey.name = "미키마우스";
//		mickey.address = "롯데타워" // 상위 타입의 참조 변수 (Animal mickey)로 하위 타입의 멤버(address) 사용 불가.
		
		mickey.showName(); // 상위 타입(Animal)의 참조 변수지만, 오버라이딩이 되었기 때문에 예외적으로 사용 가능.
		
//		mickey.showAddr(); // 상위 타입의 참조변수(Animal mickey)로 하위 타입의 멤버 (showAddr()) 사용 (접근) 불가
	}

}
package com.overriding;

public class Animal {
	public String name;
	
	public void showName () {
		System.out.printf("너는 %s이야",name); 
	}
}
package com.overriding;

public class Mouse extends Animal{
	public String address;
	
	public void showAddr() {
		System.out.printf("%s는 %s에 살아", name, address);
	}

	
	public void showName() {
		System.out.println("내 이름은 비밀인데?");
	}
	
	
	public void showName(String yourName) {
		System.out.printf("%s 안녕,나는 %s야 \n", yourName, name);
	}
	
}