접근제어자
접근제어자란? =>클래스 외부에서 직접적인 접근 허용하지않은 멤버를 설정하여 은닉하는 것
1.private
2.public
3.protected
private
private 로 선언된 클래스 멤버는 외부에 공개되지 않으며 외부에서 접근도 하지 못합니다. 말도 안되는 코드지만 private 는 같은 클래스 안에서 접근 가능하다는 것을 보여주기 위함으로 짜봤습니다.
public class AccessModifier {
private String name;
public LocalDate birth;
private String condition;
public AccessModifier() {
this.condition = "good";
}
public AccessModifier(String name, LocalDate birth) {
this.name = name;
this.birth = birth;
this.condition = "good";
}
public void setBirth(LocalDate birth) {
this.birth = birth;
}
public void getWorse() {
this.condition = "bad";
}
public void getSick() {
this.condition = "sick";
}
public void getBetter() {
this.condition = "good";
}
public String getCondition() {
return this.condition;
}
public String getName () {
return this.name;
}
=====
public class AccessModifierSamePackageClass {
public void someMethodA() {
AccessModifier am = new AccessModifier();
am.birth = LocalDate.now(); // public 이라 해당 클래스의 멤버 변수에 직접 set이 가능, 보통 이렇게 안함
am.setBirth(LocalDate.now()); // 보통 이렇게 하는데, 이것도 좋은 방법은 아님
AccessModifier am2 = new AccessModifier("홍길동", LocalDate.now());
System.out.println(am2.getCondition());
System.out.println(am2.getName() + "이 추운데 나가서 놀았어요");
am2.getWorse();
System.out.println(am2.getName() + "의 상태는 " + am2.getCondition());
am2.getSick();
System.out.println(am2.getName() + "의 상태는 " + am2.getCondition());
}
protected
protected 는 상속받은 클래스나 같은 클래스 내에서 접근 혹은 사용 가능합니다.
public abstract class Human {
protected String name;
protected String head;
protected String arm;
protected String leg;
protected String getName() {
return name;
}
protected String getHead() {
return head;
}
protected String getArm() {
return arm;
}
protected String getLeg() {
return leg;
}
}
//////////////////사람을 상속받은 하치
public class Hachi extends Human{
@Override
public String getLeg() {
return super.getLeg();
}
@Override
public String getArm() {
return super.getArm();
}
}
public
public 은 어떤 클래스든지 접근 사용 가능합니다.
public class Hachi2 {
protected String name = "hachi";
public String message = "this is public message.";
}
출처 : http://tcpschool.com/java/java_modifier_accessModifier
https://wikidocs.net/232