-
Java - Promotion, Casting 묵시적, 명시적 형변환Java 2018. 1. 18. 11:04반응형package chapter05.exam06.promotion;/* vertebrate/ \/ \Birds Mamal/ \ / \Chicken Duck Dog Cat*/class Vertebrate{} // 척추 동물class Birds extends Vertebrate{} // 조류class Chicken extends Birds{} // 닭class Duck extends Birds{} // 오리class Mamal extends Vertebrate{} // 포유류class Dog extends Mamal {} // 개class Cat extends Mamal {} // 고양이public class Promotion {static Vertebrate Verte;public static void main(String[] args) {Verte = new Chicken();Verte = new Duck();Verte = new Dog();Verte = new Cat(); // 묵시적 형변환 - 프로모션 Promotion// 직접적인 상속관계가 없으면 사용 불가// Birds bd = new Dog(); -> XVerte = new Birds();Verte = new Mamal();Verte = new Vertebrate();}}// 명시적 형변환은 - 캐스팅 Castingpublic class Mamal{public void birth() {System.out.println("새끼를 낳는다.");}public void eat() {System.out.println("먹이를 먹인다.");}}public class Dog extends Mamal{@Overridepublic void birth() {System.out.println("여러 새끼를 낳는다.");}public void bark() {System.out.println("멍멍");}}public class Cat extends Mamal{@Overridepublic void birth() {System.out.println("여러 새끼를 낳는다.");}public void mew() {System.out.println("냐옹");}}< Main >public class Casting {public static void main(String[] args) {Mamal mal = null;mal = new Dog(); // promotion, 묵시적 형변환mal.birth();mal.eat();// mal.brak();// 직접 만든 메서드는 프로모션에서는 사용 불가Dog dog = (Dog)mal; // casting, 명시적 형변환dog.bark();// 개의 고유 특성을 찾기 위해서는 개의 형태로 변경되어야 한다.Cat cat = (Cat)mal; // castingcat.birth();cat.eat();cat.mew();// Dog dog = (Dog)mal; // Cat형태가 들어있는 mal을 dog형태로 바꾸려니까 에러}}// 그래서 해당 객체가 바꾸려고 하는 원형인지 원형인지 확인해 봐야 한다.// Dog dog = (Dog)mal; // Cat형태가 들어있는 mal을 dog형태로 바꾸려니까 에러if(mal instanceof Dog) { // A가 B의 원형이 맞느냐dog = (Dog)mal;}else {System.out.println("객체 원형이 일치 하지 않습니다.");}반응형
'Java' 카테고리의 다른 글
Java - 추상화 (Abstraction) (0) 2018.01.19 Java - Casting 명시적변환 (0) 2018.01.18 Java - 다형성(Polymarphism) (0) 2018.01.18 Java - extends (0) 2018.01.18 Java - Static (0) 2018.01.16 댓글