ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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(); -> X
            
            Verte = new Birds();
            Verte = new Mamal();
            
            Verte = new Vertebrate();
            
        }

    }




    // 명시적 형변환은 - 캐스팅 Casting

    public class Mamal{
        public void birth() {
            System.out.println("새끼를 낳는다.");
        }
        public void eat() {
            System.out.println("먹이를 먹인다.");
        }
    }

    public class Dog extends Mamal{
        @Override
        public void birth() {
            System.out.println("여러 새끼를 낳는다.");
        }
        public void bark() {
            System.out.println("멍멍");
        }
    }

    public class Cat extends Mamal{
        @Override
        public 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; // casting
            cat.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

    댓글

Designed by Tistory.