7-21 접근제어자
private: 같은 클래스
(default): 같은 패키지. 접근 제어자를 아무것도 안붙인 것
protected: 같은 패키지 + 다른 패키지의 자손
public: 접근 제한이 전혀 없다.
4개중에 한개만 사용가능하다.
접근 범위는 public이 제일 넓고 private가 제일 좁다.
클래스 앞에 붙일 수 있는 접근 제어자: public, default(class 앞에 아무것도 안붙임)
멤버들에는 4가지를 전부 붙일 수 있다.

System.out.println(p.prv); // 에러. 접근 범위가 안맞는다.
private멤버는 같은 클래스 안에서만 접근 할 수 있다.
클래스 밖에서는(다른 클래스) 접근 제어자가 private멤버를 사용하려고 하면 에러가 난다.
pkg1패키지 안에 MyParent클래스와 MyParentTest클래스가 있다.

MyParent의 접근제어자가 default라
다른 패키지에서 class MyChild extend MyParent {} 사용이 안되고
같은 패키지인 public class MyParentTest{} 만 사용이 가능하다.
다른 패키지에서 MyParent를 쓰려면 public을 붙여야 한다.
그런데 하나의 소스파일에 public클래스가 하나만 있어야 한다.
그런데 pkg1패키지에 public이 두개가 되니 MyParentTest의 public을 지우자.
public class MyParent로 바꾸면 소스파일의 이름도 바꿔줘야 한다.
왜냐하면 public class 이름과 소스파일의 이름이 일치해야하기 때문이다.
MyChild에 여전히 오류가 생기는데
MyParent가 있는 줄에 마우스를 두고 ctrl+ shift+o를 하면 import문이 자동 추가된다.
import pkg1.MyParent;
import문 넣기 싫으면 class MyChild pkg1.MyParen {} 패키지 이름 붙여주면 된다.
근데 패키지 이름을 넣기 싫으니 import문을 추가해준다.
MyChild가 MyParent의 자손이라서 protected와 public은 가능하다.
public class MyParentTest2는 다른 패키지에 다른 클래스라서 public만 가능하다.
private 범위: MyParent(같은 클래스)
(default) 범위: 같은 패키지
protected 범위: 같은 패키지 + 다른 패키지지만 자손
public 범위: 전혀 제한 없음

private은 MyParent.class파일내에서만 접근 가능하다.
class가 하나의 class파일이니까
MyParent.class하고 MyParentTest.class는 같은 소스파일에 있지만
컴파일하고 나면 별도의 클래스 파일로 존재한다.
private는 결국 하나의 파일이 범위인 것이다. (빨간 테두리)
(default)는 같은 폴더(패키지)가 범위인 것이다. (파란 테두리)
protected는 같은 폴더(패키지) + 다른 폴더 자손까지 범위인 것이다. (노란 테두리)
public은 전체에서 다 접근 가능하다. 접근 제한 없음.


'프로그래밍 언어 > 자바의 정석 기초편' 카테고리의 다른 글
자바의 정석 기초편 ch7-23 다형성 (0) | 2022.09.02 |
---|---|
자바의 정석 기초편 ch7-22 캡슐화 (0) | 2022.08.28 |
자바의 정석 기초편 ch7-17~20 제어자, static, final, abstract (0) | 2022.08.25 |
자바의 정석 기초편 ch7-15, 16 import문, static import문 (0) | 2022.08.25 |
자바의 정석 기초편 ch7-12~14 패키지, 클래스 패스 (0) | 2022.08.23 |