게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
Covariance and Contravariance in Java
게시물ID : programmer_18800짧은주소 복사하기
작성자 : xtim
추천 : 0
조회수 : 397회
댓글수 : 3개
등록시간 : 2016/10/23 13:11:48

회사에서 공짜 음료수 자판기를 설치 하기로 했다.
설치할 수 있는 자판기 종류는 무엇이 있을까?
콜라전용 또는 사이다전용 그리고 둘 중 아무거나 나오는 음료수 자판기를 설치 할 수 있겠다.

class 음료 {}
class 콜라 extends 음료 {}
class 사이다 extends 음료 {}

class CovarianceTest {
    public static void main(String[] args) {
       
        자판기<콜라> 콜라자판기 = new 자판기<>();
        자판기<사이다> 사이다자판기 = new 자판기<>();
        자판기<음료> 랜덤음료자판기 = new 자판기<>();

        콜라자판기.음료추가(new 콜라());
        사이다자판기.음료추가(new 사이다());

        랜덤음료자판기.음료추가(new 콜라());
        랜덤음료자판기.음료추가(new 사이다());

        판매하기(콜라자판기);
        판매하기(사이다자판기);
        판매하기(랜덤음료자판기);
    }

    public static 음료 판매하기(자판기<? extends 음료> 기계)  {
        return 기계.음료반환();
    }
}


직원들이 공짜 음료를 너무 많이 마시는 바람에 캔 수거함이 필요 했다.
회사는 수거함을 어떻게 구입해야 할까?
콜라캔 수거함만 구입하면 사이다캔은 처리 할 곳이 없고 사이다캔만이면 콜라캔이 문제다.
따라서 전용수거함을 따로 구입 하거나 각 캔을 동시에 처리 할 수 있는 수거함을 구입 할 수도 있고
물론 콜라전용과 동시용, 사이다전용과 동시용으로 구입 할 수도 있겠다.

class 캔 {} 
class 콜라캔 extends {}
class 사이다캔 extends {}

class ContraVarianceTest {
    public static void main(String[] args) {

       수거함<콜라캔> 콜라캔수거함 = new 수거함<>();
        수거함<사이다캔> 사이다캔수거함 = new 수거함<>();  
        수거함<> 캔수거함 = new 수거함<>();

        콜라캔수거하기(캔수거함, new 콜라캔());
        콜라캔수거하기(콜라캔수거함, new 콜라캔());

        사이다캔수거하기(캔수거함, new 사이다캔());
        사이다캔수거하기(사이다캔수거함, new 사이다캔());

        캔수거하기(캔수거함, new 콜라캔());
        캔수거하기(캔수거함, new 사이다캔());

        //불법캔투기(콜라캔수거함, new 사이다캔());
        //불법캔투기(사이다캔수거함, new 콜라캔());
    }

   public static void 콜라캔수거하기(수거함<? super 콜라캔> , 콜라캔 버릴캔)  {
        .캔넣기(버릴캔);
    }

    public static void 사이다캔수거하기(수거함<? super 사이다캔> , 사이다캔 버릴캔)  {
        .캔넣기(버릴캔);
    }

    public static void 캔수거하기(수거함<> , 버릴캔)  {
      .캔넣기(버릴캔);
    }

    /*public static void 불법캔투기(수거함<? extends 캔> 넣을수거함, 캔 버릴캔)  {
       넣을수거함.캔넣기(버릴캔);
   }*/
}
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호