자바 아래로 전환 하 는 의미

7281 단어 Java하향 전환
처음에 자바 를 배 울 때 아래로 전환 하 는 것 을 중시 하지 않 았 다.아래로 전환 하 는 의미 와 용 도 를 잘 모 르 겠 지만 사실은 그렇지 않 습 니 다.그 개발 과정 에서 아래로 전환 하 는 것 도 생각 하지 못 했 을 것 입 니 다.
사실은 위로 전환 하고 아래로 전환 하 는 것 이 모두 중요 하 다.아마도 우 리 는 평소에 위로 전환 하 는 것 을 많이 보고 위로 전환 하 는 것 도 이해 하기 쉬 울 것 이다.
그러나 아래로 전환 하면 바보 같 지 않 습 니까?저 는 하위 클래스 인 스 턴 스 대상 을 사용 하려 고 합 니 다.먼저 하위 클래스 인 스 턴 스 를 생 성하 여 부모 클래스 에 인용 하고 부모 클래스 를 아래로 강하 게 전달 하려 고 합 니 다.
인용,이것 은 쓸데없는 짓 이 아 닙 니까?나 는 위로 전환 하지 도 않 고 아래로 전환 하지 도 않 으 며,직접 하위 사례 를 사용 하면 된다.
제 가 자바 를 배우 기 시 작 했 을 때 도 그렇게 생각 했 습 니 다.이 잘못된 부분 으로 인해 저 는 아래로 전환 하 는 것 이 소 용이 없다 고 생각 합 니 다.
기술 이 향상 되면 서 저 는 개원 프로젝트 를 보고 공 부 를 했 는데 많은 부분 에서 아래로 전환 하 는 기술 을 사 용 했 습 니 다.그래서 저 는 이 지식 을 다시 복습 하고 싶 습 니 다.또한 많은 블 로그 글 을 검 색 했 지만 아래로 전환 하 는 것 에 대해 구체 적 으로 설명 하지 않 았 다.예 를 들 어 어떻게 사용 하 는 지 보 여 주 었 을 뿐 오히려 위로 전환 하 는 것 에 대해 많은 이 야 기 를 했다(아마 내 가 찾 지 못 했 을 것 이다).
이 블 로 그 는 바로 아래로 전환 하 는 것 을 말한다.그러면 우 리 는 아래로 전환 하 는 것 을 배우 고 이런 특성의 의미 와 사용 장면 을 알 아 보 자.
전자 제품 인 터 페 이 스 를 새로 만 듭 니 다.다음 과 같 습 니 다.

public interface Electronics{

}
간단 해,아무 방법 도 없어.
Thinkpad 노트북 종 류 를 새로 만 들 고 전자 제품 인 터 페 이 스 를 실현 합 니 다.

public class Thinkpad implements Electronics{

  //Thinkpad    
  public void boot(){
    System.out.println("welcome,I am Thinkpad");    
  }

  //  Thinkpad   
  public void program(){
    System.out.println("using Thinkpad program");
  }

}
마우스 클래스 를 새로 만 들 고 전자 제품 인 터 페 이 스 를 실현 합 니 다.

public class Mouse implements Electronics{

  //    
  public void move(){
    System.out.println("move the mouse");    
  }

  //     
  public void onClick(){
    System.out.println("a click of the mouse");
  }
}
키보드 키보드 클래스 를 새로 만 들 고 전자 제품 인 터 페 이 스 를 실현 합 니 다.

public class Keyboard implements Electronics{

  //        
  public void input(){
    System.out.println("using Keyboard input");
  }

}

이곳 에는 하위 클래스 가 비교적 많은 것 은 더 잘 이해 하기 위해 서 이다.각 유형의 방법의 논리 적 실현 도 간단 하 다.한 줄 의 정 보 를 인쇄 했다.
그 다음 에 우 리 는 쇼핑 몰 에 가서 전자 제품 을 사고 전자 제품 이 많 습 니 다.예 를 들 어 노트북,마우스,키보드,걸음 이 높 은 판독 기 가 어디 를 누 르 지 않 는 지,우리 가 사용 하 는 핸드폰 등 은 모두 전자 제품 에 속 합 니 다.전자 제품 은 추상 적 이다.자,그럼 Thinkpad 한 대,마우스 하나,키보드 하 나 를 사기 로 했 습 니 다.
이때,우 리 는 이 전자 제품 들 을 담 을 카 트 가 필요 하 다.우 리 는 카 트 에 추가 한 후에 카 트 를 통 해 저 장 된 전자 제품 의 수량 을 알 수 있 고 해당 하 는 전자 제품 을 얻 을 수 있다.
그럼 쇼핑 카 트 하나 가 나 왔 습 니 다.다음 과 같 습 니 다.

import java.util.ArrayList;
import java.util.List;

public class ShopCar{

  private List<Electronics> mlist = new ArrayList<Electronics>();

  public void add(Electronics electronics){

    mlist.add(electronics);

  }

  public int getSize(){

    return mlist.size();
  }


  public Electronics getListItem(int position){
    return mlist.get(position);

  }
}
List 집합 은 전자 제품 을 저장 하 는 데 사용 되 며,add 방법 은 전자 제품 을 카 트 에 추가 하 는 데 사용 되 며,getSize 방법 은 저 장 된 전자 제품 의 수량 을 얻 는 데 사용 되 며,getList Item 방법 은 해당 하 는 전자 제품 을 얻 는 데 사용 된다.
List에서 범 형 지식 을 사 용 했 는데 왜 범 형 을 사 용 했 는 지 볼 수 있 습 니 다.이것 은 소 개 를 하지 않 겠 습 니 다.범 형 은 매우 중요 합 니 다.
저 는 왜 Thinkpad,Mouse,Keyboard,Phone 등 을 넣 는 것 이 아니 라 Electronics 를 넣 는 범 형 인지 궁금 합 니 다.
그렇다면 List라면 마우스 마우스 마우스 에 넣 을 수 없 겠 지,설마 3 개의 집합 을 만들어 야 하나?여 기 는 3 개의 전자 제품 류 를 정 의 했 지만 제 가 100 가지 전자 제품 이 있다 면 100 개의 집합 을 정의 해 야 합 니까?
이거 너무 무서워.그래서 전에 우 리 는 Electronics 인 터 페 이 스 를 써 서 하나의 Electronics 기준 을 제공 한 다음 에 모든 Electronics 서브 클래스 가 이 인 터 페 이 스 를 실현 하도록 했다.
실제로 여 기 는 위로 전환 하 는 지식 과 관련 되 었 다.우 리 는 add 방법 으로 하위 인 스 턴 스 를 전달 하여 보관 하지만 하위 인 스 턴 스 는 전달 하 는 과정 에서 도 위로 전환 했다.
따라서 이때 카 트 에 저 장 된 하위 클래스 인 스 턴 스 대상 은 위로 전자 제품 으로 전환 되 어 하위 클래스 만 의 방법 을 잃 어 버 렸 다.상기 예 를 들 어 Thinkpad 인 스 턴 스 는 boot()와 program()두 가지 방법 을 잃 어 버 렸 고 Mouse 인 스 턴 스 는 move()와 onClick()두 가지 방법 을 잃 어 버 렸 다.
하지만 실제 Thinkpad 나 Mouse 나 Keyboard 를 사용 할 때 는 우리 가 원 하 는 것 이 아 닐 것 이다.
이어서 우 리 는 카 트 안의 전자 제품 을 테스트 하기 위해 테스트 클래스 Test 를 썼 다.
테스트 클래스 Test 는 다음 과 같 습 니 다.

public class Test{

  public static final int THINKPAD = 0;
  public static final int MOUSE = 1;
  public static final int KEYBOARD = 2;

  public static void main(String[] args){

    //      
    ShopCar shopcar = new ShopCar();
    shopcar.add(new Thinkpad());
    shopcar.add(new Mouse());
    shopcar.add(new Keyboard());

    //    
    System.out.println("              ――> "+shopcar.getSize());


    //    thinkpad  
    Thinkpad thinkpad = (Thinkpad)shopcar.getListItem(THINKPAD);
    thinkpad.boot();
    thinkpad.program();

    System.out.println("-------------------");

    //    Mouse  
    Mouse mouse = (Mouse)shopcar.getListItem(MOUSE);
    mouse.move();
    mouse.onClick();

    System.out.println("-------------------");

    //    Keyboard  
    Keyboard keyboard = (Keyboard)shopcar.getListItem(KEYBOARD);
    keyboard.input();
  }
}
캡 처 실행:

예 를 들 어 분석 하면 돼 요.

//    thinkpad  
Thinkpad thinkpad = (Thinkpad)shopcar.getListItem(THINKPAD);
thinkpad.boot();
thinkpad.program();
shopcar.getListItem(THINKPAD)이라는 코드 는 Electronics 형식 을 가 져 온 인 스 턴 스 입 니 다.Thinkpad 의 인 스 턴 스 가 아 닙 니 다.
아래로 전환 하여 하위 클래스 에 값 을 부여 합 니 다.

Thinkpad thinkpad = (Thinkpad)shopcar.getListItem(THINKPAD);
이러한 인 스 턴 스 는 위로 전환 해서 잃 어 버 린 방법(boot 와 program)을 다시 얻 었 습 니 다.
정리 해 보 세 요.많은 경우 에 우 리 는 여러 종류의 실례 대상 을 모두 하나의 집합 에 던 져 야 합 니 다.(이 말 은 매우 중요 하 다)
이 예 에서 Thinkpad 노트북,마우스 마우스,KeyBoard 키보드 등 인 스 턴 스 대상 을 모두 하나의 Shopcar 카 트 에 던 져 모 으 는 것 이다.
그러나 그들 에 게 모든 종 류 를 하나의 독립 된 집합 으로 저장 할 수 는 없 을 것 이다.이 럴 때 우 리 는 하나의 기준 을 찾 아야 한다.인 터 페 이 스 는 하나의 기준 이다.이것들 은 모두 각종 전자 제품 으로 추상 적 으로 전자 제품 으로 되 어 있다.그리고 전자 인터페이스 가 나 왔 습 니 다.
아까 로 돌아 가서 우 리 는 많은 종류의 실례 대상 을 모두 하나의 집합 에 던 졌 다.아마도 이렇게 하면 비교적 이해 하기 쉬 울 것 이다.여러 종류의 하위 클래스 실례 대상 을 모두 부모 클래스 실례 를 저장 하 는 집합 에 던 져 라.
이 과정 을 거 쳐 하위 클래스 인 스 턴 스 는 부모 클래스 참조(즉,위로 전환 완료)에 할당 되 었 으 나 아 쉽게 도 하위 클래스 확장 방법 을 잃 어 버 렸 습 니 다.
좋 은 것 은 자바 언어 가 아래로 전환 하 는 특성 이 있어 서 우 리 는 잃 어 버 린 방법,즉 하위 클래스 를 강하 게 되 돌 릴 수 있 습 니 다.
그래서 우 리 는 하위 클래스 인 스 턴 스 를 사용 해 야 할 때 그 부모 클래스 집합 에서 꺼 내 서 아래로 전환 하면 됩 니 다.마찬가지 로 하위 클래스 인 스 턴 스 대상 을 사용 할 수 있 습 니 다.
……
나 는 자바 가 아래로 전환 하 는 의 미 를 검색 할 때 비교적 좋 은 답 을 얻 었 다.
가장 큰 용 도 는 자바 의 일반적인 프로 그래 밍 으로 용도 가 매우 크 고 자바 의 집합 류 는 모두 이렇다.
안 드 로 이 드 개발 에 서 는 Layout 폴 더 에서 xml 로 작 성 된 컨트롤 입 니 다.왜 Activity 등 구성 요소 에서 findView ById()방법 으로 찾 을 수 있 습 니까?왜 findView ById(R.id.textview)방법 이 TextView 의 id 에 들 어간 후에 TextView 로 전환 해 야 합 니까?이것 이 바로 자바 가 아래로 전환 하 는 응용 이다.
자바 의 하향 전환 에 대한 의 미 를 담 은 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 의 하향 전환 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기