C#에서는 클래스를 internal
으로 표시하여 동일한 패키지 내에서만 액세스 할 수 있습니다. Java와 비슷한 것이 있습니까?Java의 내부 클래스와 같은 것이 있습니까?
답변
클래스 선언에서 보안 수정 자 (public, private)를 생략하여 패키지 개인 클래스를 작성할 수 있습니다.
package com.sample;
class MyPackagePrivateClass
{
...
}
액세스 한정자 삭제는 C#의 내부 규칙과 유사합니다.
C#을
public class A
{
public static int X;
internal static int Y;
private static int Z;
}
internal class B
{
public static int X;
internal static int Y;
private static int Z;
public class C
{
public static int X;
internal static int Y;
private static int Z;
}
private class D
{
public static int X;
internal static int Y;
private static int Z;
}
}
자바
public class A
{
public static int X;
static int Y;
private static int Z;
}
class B
{
public static int X;
static int Y;
private static int Z;
public class C
{
public static int X;
static int Y;
private static int Z;
}
private class D
{
public static int X;
static int Y;
private static int Z;
}
}
예. 그것은 패키지 개인라고, 당신은 어떤 수정없이 클래스를 정의 : 당신은 클래스 패키지 현지 할 수
package com.blah; class Foo{ }
. 이것은 클래스의 기본 범위입니다. 즉 액세스 수정자가없는 위치입니다.
실제로 언젠가 넣기를 원한다면 예를 들어 주석을 만들 수 있습니다. @package_local, 나는 speicifc 패키지를 로컬 패키지로 만들고 싶지 않고 그냥 지정하지 않은 장소에서이 작업을 수행합니다.
예, 기본 (패키지 개인) 액세스 수준입니다. 클래스 정의에 액세스 수정자를 두지 않고 원하는 것을 얻을 수 있습니다.
는 전 C#에 익숙하지 해요,하지만 자바의 기본 보호는 뭔가 패키지 내에서만 액세스 할 수 있다는 것입니다 :
누구나 접근 할 수 = 공공
는 현재 클래스
내 접근 = 개인는 패키지 내에서 또는 현재 클래스에서 패키지 내에서 접근
기본 =을 상속하는 모든 클래스에서 = 접근 보호
나는 항상 "현재 클래스에서 상속하지만 다른 어느 곳에서도이 패키지 또는 다른 어떤 클래스에서도 상속받을 수있는 클래스에서 액세스 할 수 있어야합니다."라고 말할 수있는 방법이 있어야한다고 생각했습니다. 그러나 그렇지 않습니다.
마지막 코멘트에 대해 C#은 "내부를 보호했습니다" – projectshave
@projectshave는 잘못하지 않았습니다. C#의 "protected internal"은 어셈블리에서 모두 액세스 할 수 있습니다. 실제로는 C# juse의 서브 클래스에만 클래스의 액세스를 제한하려면 "protected"를 사용하십시오. java에서는 "protected"가 동일한 패키지에서 하위 클래스에 액세스 할 수 있습니다. –
이 질문은 이전에 받아 들여지는 대답이 있지만, 그 대답은 .Net.
java에는 C#의 내부 한정자와 정확히 동일한 기능이 있습니까? 짧은 대답은 아니오입니다 (그러나 당신은 그것을 어떻게 얻을 수 있고 어떻게 말할 것인가?)!
내부 C#은 실제로 "어셈블리 - 개인"수정 자입니다. 어셈블리 란 무엇입니까?
총회는 프로젝트의 모든 제품 (C#에서 DLL 혹은 EXE - 자바에 상응하는 JAR 파일도 가능) 자바의 내부에 대한 정확한 해당이없는
. Bryan Kyle이 대답하고 받아 들인 것은 실제로 "package-private"(java의 패키지는 C#의 네임 스페이스와 동일합니다)이지만 어떤 것은 어떻게 대답되었는지는 동일한 결과를 얻는 가장 가까운 방법입니다.
내부와 완전히 동일한 결과를 얻는 방법은 무엇입니까? 위선적 인 자바는 이것을위한 해결책이 있습니까? 대답은 '예'입니다.
이 있습니다. 수식어는 포함하지 않습니다. 실제로이 작업을 수행하는 가장 좋은 방법은 패키징의 비밀입니다. 패킹의 가장 좋은 방법은 유형별이 아닌 관계식에 따라 클래스를 묶는 것입니다.
많은 사람들이 "모델"또는 "발표자"라는 패키지를 사용하고 모델이나 발표자를 모두 포함시킵니다. 이것은 잘못된 것입니다. 패키지는 "BookModel.java", "BookPresenter.java", .....
을 포함하는 "Book"과 같아야합니다. 이렇게하면 수식어를 생략하여 패키지 전용으로 만들 수 있으며 문제가 없습니다. 패키징의 우수 사례가 있으므로 패키지 개인 클래스가 필요한 모든 클래스에서 액세스하십시오.
- 1. C++ 0x - lambda 표현식은 Java의 익명 내부 클래스와 동일하게 보입니까?
- 2. Java의 WebClient.DownloadString과 비슷한 것이 있습니까?
- 3. Java의 AWT Robot 클래스와 동일한 Python이 있습니까?
- 4. Java의 타원 내부 루프
- 5. 다른 최상위 클래스와 같은 이름의 Java 내부 클래스
- 6. NSBottomBar와 같은 것이 있습니까?
- 7. Server.FileNameEncode와 같은 것이 있습니까?
- 8. CURLOPT_CONNECTIONTIMEOUT과 같은 것이 있습니까?
- 9. Java의 일반 유형의 내부 클래스
- 10. 클래스와 같은 다른 jQuery 파일이 있습니까?
- 11. 클래스와 이름이 같은 함수를 만들 수 있습니까?
- 12. Java의 정적 클래스에는 어떤 것이 있습니까?
- 13. 추상 클래스와 인터페이스 java의 모범 사례
- 14. PHP 용 DWR과 같은 것이 있습니까?
- 15. MATLAB에서 'whereis'와 같은 것이 있습니까?
- 16. jQuery에는 isClicked와 같은 것이 있습니까?
- 17. ActionMailer에 필터와 같은 것이 있습니까?
- 18. PHP에서 Chronic과 같은 것이 있습니까?
- 19. 기능 모델과 같은 것이 있습니까?
- 20. Jsp 다이어그램과 같은 것이 있습니까?
- 21. 웹용 TextMate 같은 것이 있습니까?
- 22. Readability.js와 같은 Python을위한 것이 있습니까?
- 23. XML 2.0과 같은 것이 있습니까?
- 24. Linux의 Shark와 같은 것이 있습니까?
- 25. "class [i]"클래스와 같은 클래스의 액세스 벡터는
- 26. 내부 클래스와 외부 멤버에 대한 액세스
- 27. 내부 클래스와 순환 의존성을 어떻게 해결합니까?
- 28. final 및 abstract 전용 한정자를 java의 로컬 내부 클래스와 함께 사용할 수있는 이유는 무엇입니까?
- 29. `String` 클래스와 같은`Class` 구현
- 30. C++ - 클래스와 같은 이름의 클래스에서 함수 호출하기
http://stackoverflow.com/questions/2534733/java-protected-classes 가능한 복제본 – pintxo
@cmmi : 완전히 다른 관점에서 묻는 질문이므로 중복되지는 않습니다. 그래도 같은 대답. –
C#에는'packages'가 없습니다. 이름 공간과 어셈블리가 있습니다. 패키지는 네임 스페이스와 동일합니다. 그러나 어셈블리는 Java의 JAR 파일과 비교할 수 있습니다. 'internal' 수정자는 클래스를 어셈블리 안에서만 접근 가능하게 만듭니다. 따라서 이름 공간이나 패키지와는 아무런 관련이 없습니다. – nedR