Java에서 부모 클래스 및 하위 클래스의 참조를 만들어야하는 이유는 무엇입니까? 우리는 이것으로 무엇을 달성 할 수 있습니까? 명백한 대답은 다형성이지만 범위는 무엇입니까? 실시간으로 어떻게 도움이됩니까? 자바를 배우면서 나는 이것을 보았습니다.상위 클래스 및 하위 클래스의 참조
답변
예를 들어, 부모 클래스 참조를 사용하면 전달되는 특정 유형의 목록을 신경 쓰지 않고 모든 종류의 List를 취해서 작동하는 메서드를 작성할 수 있습니다.
반면에 하위 클래스는 실제 구현을 지정하므로 메서드의 사용자는 자신의 요구 사항에 가장 효율적이거나 적절한 목록을 선택할 수 있습니다.
당신이 목록의 합을 계산하는 방법을 쓰기 가정 :int sum(List<Integer> input);
는 이제 방법의 한 사용자가 자신이에 대한 빠른 랜덤 액세스를 관심있는 목록을 가지고 가정을, 그래서 그는 동안, ArrayList에를 생성 다른 사용자는 자신의 목록을 자주 연결하고 결합하려고하므로 대신 LinkedList를 사용합니다.
이 두 사용자는 이제 sum 메소드를 사용할 수 있습니다.
다형성이 실제 생활에서 당신을 어떻게 돕습니까?
다른 인수 또는 구현을 수용하기 위해 코드의 유연성을 높이십시오. 예를 들어
, 하나는 방법을 생각할 수 :
void foo(ArrayList<T> arg) {
for (T t : arg) {
// do something
}
}
우리가 정말 ArrayList에 수용에만이 방법을 제한해야합니까? 결국 우리가 사용하고있는 함수는 LinkedList 또는 Set에서 똑같이 수행 될 수 있습니다. 우리가 대신 쓴 경우에도 더 많은 기능이 될 것입니다 :
void foo(Iterable<T> arg) {
for (T t : arg) {
// do something
}
}
마찬가지로, 우리가 작성하는 경우 : 우리가 인수에 사용할 방법이 ArrayList에 만 사용할 수있는 경우
가ArrayList<T> arg = new ArrayList<T>();
이는 유용합니다. 우리가 원하는 방법의 ArrayList의 슈퍼 클래스에 선언하는 경우, 우리는로 변경하여 우리의 코드를보다 유연하게 할 수 있습니다 우리가 실제로 인수 정렬 될 필요가 있다고 결정하면 다음
Collection<T> arg = new ArrayList<T>();
그리고, 우리는 변경 될 수 있습니다 아주 쉽게
우리의 코드에서 다른 작업을 깨지 않고Collection<T> arg = new PriorityQueue<T>();
에 그것, 그것이 ArrayList의를 받아 들일 것 같은 foo는()는 그냥 즐겁게 사용해, PriorityQueue을 지불 할 용의가 있기 때문에. 서브 클래스에 대한 특정 구현 세부 사항에 의존하지 않으시면, 매우 빠르게 로트를 변경할 수 있습니다.
의견에서 언급했듯이 매우 간단한 예제를 통해 설명하면 더 강력 해집니다. 데이터베이스와 인터페이스하는 응용 프로그램이 있다고 가정 해 보겠습니다.우리의 데이터베이스는 MySQL의 경우, 당신은 매우 구체적인 MySQL의 코드를 작성에 잡힐 수 있습니다 사람들을 많이 후
MySQL db = new MySQL();
int results = db.mySqlExecute("SELECT count(*) FROM names WHERE firstname = 'Bobby';");
(주, 영원히 그래서 이것은 완전히 인위적인이다의 모든 JDBC 물건을하지 않은) 커다란 응용 프로그램이라면, 여러분의 코드는 MySQL로부터 완전히 확장 할 수 없으므로 PostgreSQL이나 다른 어떤 데이터베이스 시스템도 구현할 수 없습니다.
DataBase db = new MySQL();
int results = db.getCount("names", "firstname = 'Bobby'");
을 당신은 쉽게
DataBase db = new PostgreSQL();
에 첫 번째 라인을 변경하고 코드가 하나의 간단한 변화에 잘 작동합니다 : 대신하는 경우가 물품. 이것이 다형성의 힘입니다. 단일 구현에 묶이지 않습니다.
- 1. 하위 클래스의 nhibernate 참조 상위 클래스
- 2. Python의 하위 클래스 및 상위 클래스
- 3. 상위 클래스의 하위 클래스 변수 읽기
- 4. 하위 클래스의 상위 클래스에 액세스
- 5. 슈퍼 클래스의 C++ 참조 하위 클래스
- 6. 하위 클래스의 추상 수퍼 클래스 필드 참조
- 7. 상위 및 하위 클래스의 동일한 메소드 이름?
- 8. 상속 - 상위 클래스 배열 및 하위 클래스 배열 - 캐스팅
- 9. 다른 클래스의 클래스 참조
- 10. Generate 클래스의 클래스 참조
- 11. 하위 클래스 본문에서 상위 클래스 속성에 액세스
- 12. 상위 및 하위 클래스 계층 구조
- 13. Java에서 상위 클래스의 모든 하위 클래스에 액세스
- 14. 상위 클래스 변수를 덮어 쓰는 하위 클래스?
- 15. 클래스의 하위 클래스 '
- 16. CSS 선택자 : 상위 클래스의 여러 클래스
- 17. 상위 클래스 목록에 하위 클래스 목록 결합
- 18. PHP : 하위 또는 상위 클래스의 클래스 속성/상수 값
- 19. 상위 클래스의 하위 클래스 생성자를 호출 할 수 있습니까?
- 20. compositeid가있는 클래스의 하위 클래스
- 21. AS 3.0의 참조 상위 클래스 함수
- 22. 다중 상위 하위 클래스 (레일)
- 23. 순환 참조 - 프로토콜 및 하위 클래스
- 24. 추상 클래스 c의 하위 클래스에서 추상 클래스의 참조 사용
- 25. 상위 생성자 앞에서 하위 클래스 생성자 호출
- 26. 하위 클래스의 대리자 선언이 상위 클래스의 대리자와 호환되지 않습니다.
- 27. 하위 클래스, 상위 클래스 ... ... 변수 충돌?
- 28. C++ 하위 클래스 내의 상위 클래스 변경
- 29. 상위 클래스의 C++ 호출 하위 함수
- 30. 파이썬 상위 클래스 클래스 속성에서 서브 클래스의 속성 검사
패러다임에 대해 이야기하고 있다고 가정합니다. List foo = new ArrayList (); ? –
Trasvi
다형성이 어떻게 도움이되는지 알고 싶습니까? –
확인하십시오. [대답 1] (http://stackoverflow.com/a/12159803/2024761), [대답 2] (http://stackoverflow.com/a/2482808/2024761) – SudoRahul