2012-09-13 3 views
5

Java 및 C#의 액세스 한정자를 비교했습니다. Java에서 C#의 protected internal 대체품을 찾고 싶었습니다. 그러나 protected 수식어가 두 언어 (C#Java)가 다른 것으로 나타났습니다. Java의 protected은 C#의 protected internal과 동일합니다. 멤버가 동일한 패키지 내에서 액세스 할 수 있기 때문입니다.Java 및 C#의 액세스 지정자에 관한 혼동

I가 그들이 자바와 C#에서 같은 수식에 다른 의미를 만든 이유는 두 가지 질문

  • ?
  • C# ()의 protected을 어떻게 가질 수 있습니까? 포함 된 클래스에서 파생 된 클래스 또는 유형을 포함하여 액세스가 제한됩니다 ()?

답변

2

왜 그들이 같은 자바에서 수정 및 C 번호에 다른 의미를 만들어가?

단순함과 다른 액세스 권한을 정확하게 지정할 수있는 능력 사이를 선택해야했습니다. Java의 작성자와 C#의 작성자가 다른 선택을했습니다.

Java에서 C# (액세스는 클래스 또는 포함하는 클래스에서 파생 된 유형으로 제한됨)로 보호 할 수 있습니까?

수 없습니다. Java는이 시점에서 더 제한적입니다.

그러나 두 사용 모두에서 일반적인 캡슐화 원칙을 위반한다는 의미이므로 protected 키워드의 사용을 제한해야합니다. 너무 엄격한 언어는 너무 많은 쓸데없는 코드를 의미 할 수 있지만 너무 얽매이고 변경 및 유지하기 어려운 것을 만들지 않도록주의하십시오. 클래스 오버라이드에 대한 내부 필드 나 메소드에 대한 액세스 권한 부여는 종종 구현 결합이 너무 많은 무거운 계층을 의미합니다 (유지 관리를 위해 계층 구조보다 컴포지션 선호).

액세스 제어 수정 자없이 선언 된 변수 또는 메소드는 동일한 패키지의 다른 클래스에서 사용할 수 있습니다. 내 의견으로는, 그것은 패키지의 하위 클래스에 의한 액세스를 허용하는 것보다 건전하다.

Here's the complete grid

은 :

자바 API 문서에서

enter image description here

+0

"너무 얽히고 변경 및 유지하기 어려운 것을 조심하십시오." 나는 이해하지 못했다. 수정 자 (modifier)는 어떻게 그 역할을 수행합니까? – Shashwat

+0

내부 필드에 액세스하는 하위 클래스가있을 때 상위 클래스의 구현을 변경하지 못하게하는 강력한 결합이 있습니다. 이것이 캡슐화가 피하는 데 도움이되는 문제 중 하나입니다. –

+0

알았어요. 감사 :) – Shashwat

0

키워드 액세스 지정은 Sun.com에서 제공되지 않습니다. 이 예를 시도하십시오

D:\>javac Demo.java 
Demo.java:1: error: **modifier** private not allowed here 
private class Test 
     ^
1 error