2010-08-18 9 views
3

"패키지를 가져 오는 동안 우리는 모든 공용 함수를 사용할 수 있습니다. 클래스를 확장하는 용도는 무엇입니까?" "3 년 동안 OOP Langusges를 공부했는데이 질문에 답변을 얻지 못했습니다."가져 오기 및 확장

+1

포럼에서 특정 질문을하는 것입니다. 검색 방법을 알고 있습니다. –

+1

야, 초보자에게 너무 가혹하지 말고, 게시물을 편집하고 맞춤법 오류를 수정하려면 충분한 평판을 얻지 않으시겠습니까? 범죄는 없습니다. –

+1

@Shakedown, 나는 StudiousJoseph에 동의합니다. 영어가 완벽하지 않더라도 누구나 환영합니다. new_programmer의 첫 번째 언어가 영어가 아닐 수도 있다고 생각하십니까? – sgriffinusa

답변

3

상속, OOP 메커니즘의 경우 클래스를 확장하면 가져 오기와 관련이 없으므로 가져 오기를 수행 할 때 가져온 패키지와 관련된 모든 클래스를 실제로 가져옵니다.

사용자는이 클래스와 공용 멤버 또는 함수에 액세스 할 수 있으며 해당 클래스를 참조하는 클래스가 동일한 패키지에있는 경우에도 보호받을 수 있습니다. 패키지 및 가져 오기 당신이 소프트웨어 프로젝트를 구성하고 여기에서 개념을 사용할 수 있다면 약간의 모듈성을 가집니다. ...

한편 OOP 메커니즘으로서의 상속은 클래스를 구성하지만 이번에는 관계 , 회원 및 함수 재사용, 코드 가독성 및 구문 왜곡을위한 이유와 같은 많은 목적을 위해

상속 및 OOP 메커니즘의 나머지 부분에서는 객체 및 코드 의미론과 같은 방식으로 코드를 작성할 수 있습니다. 실생활을 사용하고 사람이 읽을 수있는 방식으로 코드를 생성합니다.

희망이 도움이

+0

감사합니다. 두 개의 서로 다른 클래스의 단일 클래스에 두 개의 보호 된 메서드를 사용하려면 어떻게해야합니까? –

+0

정말 당신이 사용하는 프로그래밍 언어에 따라 달라집니다. C++을 사용하면 C#, Java를 사용하는 경우 여러 상속을 이용할 수 있습니다. 예를 들어 이러한 언어는 다중 상속을 지원하지 않으므로 대신 인터페이스를 사용해야합니다. 기본 클래스는 상속 목적으로 사용되며 인터페이스는 클래스에 특정 동작을 구현하는 데 사용됩니다. – jgemedina

+0

문제에 대한 시나리오를 알려주시겠습니까? 가능한 경우 객체 디자인 솔루션을 알려줄 수 있습니까? – jgemedina

0

Java에서 클래스를 확장하면 보호 된 구성원뿐 아니라 substitute이 있습니다. 보호 된 메서드는 다른 패키지의 임의의 클래스에서 호출 할 수 없습니다.

+0

OK, 확장은 보호 된 메소드에만 액세스하는 것입니다. –

+0

클래스를 확장하면 보호 된 메소드에 액세스 할 수 있지만, 효과적인 대체를위한 도구로 생각해야합니다. –

3

두 가지 별도의 항목.

패키지를 가져올 때 importa java.util.*처럼 모든 클래스를 가져옵니다. 즉, 가능한 경우 모든 인스턴스를 인스턴스화하고 인터페이스 (공개 메소드)에 액세스하는 것을 의미합니다. 즉, 해당 클래스를 사용할 수 있습니다.

클래스를 확장하면 (이 키워드 임) 해당 동작을 다시 정의 할 수 있습니다. 메소드를 통해 구현 된 클래스 비헤이비어입니다. 그것들을 확장 함으로서 메소드 서명, 접근 자 (public, protected 등), 타입 (void, int, someObject 등)과 그 매개 변수를 반환 할 수 있습니다. 또한 상속을 통해 클래스에 새 메서드를 추가 할 수 있습니다. 즉, 자신 만의 클래스를 작성하고 상급 클래스의 모든 (public/protected) 메소드를 상속합니다.

상속 관계는 is a 관계를 만족해야합니다. Here's 상속의 예입니다.

+0

new_programmer이 좋은 예도 역시 링크를 따라야합니다. – jgemedina

1

imports와 extend는 다른 기능을 제공합니다. 패키지를 가져옴으로써 해당 패키지 내에서 공용 클래스와 공용 메소드를 활용할 수 있습니다. 클래스를 확장하면 해당 클래스와 훨씬 더 긴밀한 관계를 유지할 수 있습니다. 보호 된 멤버에 액세스 할 수있을뿐 아니라 멤버를 무시하여 기능을 수정하거나 향상시킬 수 있습니다. 확장 클래스도 원래 클래스의 한 유형으로 간주됩니다.

예를 들어 EuropeanBanker 클래스가 포함 된 Finance 패키지가 있다고 가정합니다. 이 클래스에는 유로 및 파운드의 잔액을 더하기, 빼기 및보고하는 공용 메서드가 있습니다. 이러한 작업을 구현하는 것은 매우 복잡하다고 가정합니다 (환율, 거래 수수료 등). Finance 패키지를 가져 와서 Banker 클래스를 활용하여 내가 가진 모든 유로를 추적 할 수 있습니다. 그러나 저는 Banker 클래스를 수정할 수 없습니다. 예를 들어, Banker 클래스를 사용하여 달러, 페소 또는 엔을 추적 할 수는 없습니다.

하지만 EuropeanBanker 클래스를 확장하여 예를 들어 UniversalBanker를 만드는 경우 클래스에 훨씬 더 깊이 액세스 할 수 있습니다. 달러, 엔, 페소 또는 다른 통화로 거래 할 수있는 메소드를 추가 할 수 있습니다. 이것은 EuropeanBanker에 이미 존재하는 기능을 활용하여 모두 수행 할 수 있습니다. 교환 환율, 거래 수수료 등의 보호 된 방법을 이용할 수 있습니다.

따라서 패키지를 가져 오면 기존 기능을 활용할 수 있습니다. 하지만 클래스를 확장하여 새로운 기능을 추가하거나 기존 기능을 무시할 수 있습니다.

1

패키지에서 클래스를 가져 오는 동안 클래스의 인스턴스를 통해 사용할 수 있지만 클래스를 확장하면 'this'를 통해 클래스 멤버에 액세스 할 수 있으며 'super' 키워드.

관련 문제