2010-12-20 4 views
0
Person studentA = new Student(); 

사람이 기본 클래스 학생은 Person의 하위 클래스입니다.상속 다형성 질문

위의 코드 줄을 사용하는 이유는 무엇입니까? 왜하지 마세요

Student studentA = new Student(); 

답변

2

때로는 좀 더 일반적인 의미로 객체를 참조하고 싶을 때가 있습니다. 대부분의 사람들은 사용자 인터페이스를 이해하므로 여기에 기본적인 예가 있습니다 :

어떤 종류의 큐, 예를 들어 모든 컨트롤을 비활성화 할 화면이 있다고 가정합니다. 사용자는 초기 입력을 채 웁니다. 컨트롤은 텍스트 상자, 콤보 상자 (드롭 다운) 또는 단추와 같은 것일 수 있습니다. 위의 모든 것을 참조 할 수있는 방법은 컨트롤로 취급하는 것입니다.

당신은 같은 코드를 작성할 수 있습니다 : 이것은 하나의 예입니다

foreach(Control c in MyForm.Controls)c.Enabled = false; 

을하지만 더 많은 프로그래밍을 시작으로 당신이 당신의 객체 지향 존재의 아주 기본적인 부분입니다 볼 수 있습니다.

이 기술을 사용하는 대부분의 객체 지향 기본 클래스 라이브러리를 볼 수있는 곳은 입출력이 있습니다. 모든 입출력 라이브러리를 사용할 수 있습니다. 가장 추상적 인 의미로는 스트림이 있지만 클래스 계층을 보면 스트림 개념의 다형성 변형 인 파일 스트림, 네트워크 스트림 등을 볼 수 있습니다. 스트림 구현 읽기 및 쓰기는 각각 "독자"및 "작성자"로 수행됩니다. 기본적인 프로그래밍 작업을 수행하면이 다형성이 얼마나 유용한지를 알게 될 것입니다. 예를 들어 스트림에서 읽은 코드를 작성한 다음이를 추상화하여 전달되는 Stream의 모든 구현에 적용 할 수 있습니다.

내가 항상 사람들에게 제안하려고하는 한 가지 사실은 프레임 워크 디자이너와 프로그래머가 매우 실용적인 일상적인 사용을 위해 이러한 기술을 효과적으로 사용하는 방법을 알아보기 위해 내장 라이브러리를 연구하는 것입니다.

+0

그래서 모든 객체 (모든 하위 클래스 포함)와 대화해야 할 때 모든 객체를 기본 클래스로 처리하고 모두 처리 할 수 ​​있도록 일반화했습니다. 나는 그것이 내가 당신의 모범에서 얻은 것이라고 생각합니다. – RoR

+0

맞습니다. "계약자"또는 "임시 직원"또는 "전임 사원"이더라도 모든 "직원"을 언급합니다. 그것은 많이 발생합니다. – t3rse

0

정말 그렇게하지 않겠습니까? 그러나 Person의 벡터가 있고 추가하는 Person 중 일부가 Students라는 것을 지정하고 싶다면 어떻게해야할까요?

상속 및 다형성에 대해 읽어야합니다. 당신의 질문은 당신이 정말로 프로그래밍을 많이 경험하지 않았다는 것을 보여줍니다.

이것은 Google에서 뽑은 첫 번째 링크입니다. http://msdn.microsoft.com/en-us/library/27db6csx%28v=vs.80%29.aspx

+0

위의 포스터는 "이것은 하나의 예이지만 더 프로그래밍을 시작하면 이것이 객체 지향 존재의 아주 기본적인 부분이라는 것을 알게 될 것입니다."- 당신이 "정말로 그렇게하지 않을 것"이라고 말했지만. 그럼 누가 옳은가? 그리고 네, 프로그래밍에 익숙하지 않습니다. 나는이 개념들을 이해하려고 노력하고있다. – RoR