자바 아래로 전환 하 는 의미
사실은 위로 전환 하고 아래로 전환 하 는 것 이 모두 중요 하 다.아마도 우 리 는 평소에 위로 전환 하 는 것 을 많이 보고 위로 전환 하 는 것 도 이해 하기 쉬 울 것 이다.
그러나 아래로 전환 하면 바보 같 지 않 습 니까?저 는 하위 클래스 인 스 턴 스 대상 을 사용 하려 고 합 니 다.먼저 하위 클래스 인 스 턴 스 를 생 성하 여 부모 클래스 에 인용 하고 부모 클래스 를 아래로 강하 게 전달 하려 고 합 니 다.
인용,이것 은 쓸데없는 짓 이 아 닙 니까?나 는 위로 전환 하지 도 않 고 아래로 전환 하지 도 않 으 며,직접 하위 사례 를 사용 하면 된다.
제 가 자바 를 배우 기 시 작 했 을 때 도 그렇게 생각 했 습 니 다.이 잘못된 부분 으로 인해 저 는 아래로 전환 하 는 것 이 소 용이 없다 고 생각 합 니 다.
기술 이 향상 되면 서 저 는 개원 프로젝트 를 보고 공 부 를 했 는데 많은 부분 에서 아래로 전환 하 는 기술 을 사 용 했 습 니 다.그래서 저 는 이 지식 을 다시 복습 하고 싶 습 니 다.또한 많은 블 로그 글 을 검 색 했 지만 아래로 전환 하 는 것 에 대해 구체 적 으로 설명 하지 않 았 다.예 를 들 어 어떻게 사용 하 는 지 보 여 주 었 을 뿐 오히려 위로 전환 하 는 것 에 대해 많은 이 야 기 를 했다(아마 내 가 찾 지 못 했 을 것 이다).
이 블 로 그 는 바로 아래로 전환 하 는 것 을 말한다.그러면 우 리 는 아래로 전환 하 는 것 을 배우 고 이런 특성의 의미 와 사용 장면 을 알 아 보 자.
전자 제품 인 터 페 이 스 를 새로 만 듭 니 다.다음 과 같 습 니 다.
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
이거 너무 무서워.그래서 전에 우 리 는 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 로 전환 해 야 합 니까?이것 이 바로 자바 가 아래로 전환 하 는 응용 이다.
자바 의 하향 전환 에 대한 의 미 를 담 은 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 의 하향 전환 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.