private
: 내 클래스 내부에서만 쓰겠다. (그러므로 class 앞에는 올 수 없다)
package com.bit.day08.am;
class Lec01{
public int su1=1111;
int su2=2222;
private int su3=3333;
private static int su4=4444;
private Lec01(){ //private 생성자 또한 외부접근 불허
}
void func01(){
System.out.println(su3); //private su3,su4는 클래스 내부에서만 접근가능
}
}
public class Ex01 {
public static void main(String[] args) {
//접근제한자
//public - 모두 접근 허용(클래스,변수,메소드,생성자)
//default(없는거)
//private-외부에서 접근 불허(static, non-static 상관없이 변수,메소드,생성자까지 붙을 수 있다)
Lec01 ex01=new Lec01(); //접근하기 위해 객체 생성
System.out.println(ex01.su1);
System.out.println(ex01.su2);
System.out.println(ex01.su3); //오류 : private은 클래스 내부에서만 쓴다.
System.out.println(Lec01.su4); //같은 오류
ex01.func01();
}
}
public
: 한 문서 안의 2개 이상의 public class는 올 수 없다. 단 하나의 public 클래스만 올 수 있다.
(대체적으로 main을 가진 클래스) -->나머지 클래스는 default
package com.bit.day08.am;
class Lec01{ //이곳에 public 쓰면 오류 - 쓰고싶다면 Ex01의 public을 지워야한다.
public int su1=1111;
int su2=2222;
private int su3=3333;
private static int su4=4444;
public Lec01(){
}
public void func01(){
System.out.println(su3);
}
}
public class Ex01 {
public static void main(String[] args) {
//접근제한자
//public default(없는거)
//private-외부에서 접근 불허(static, non-static 상관없이 변수,메서드,생성자까지 붙을 수 있다)
Lec01 ex01=new Lec01();
System.out.println(ex01.su1);
System.out.println(ex01.su2);
System.out.println(ex01.su3);
System.out.println(Lec01.su4);
ex01.func01();
}
}
default
: 동일 패키지에서만 접근허용, 패키지 경로가 같아야 접근 허용
package com.bit.day08.am;
class Lec01{ //이곳에 public 쓰면 오류 - 쓰고싶다면 Ex01의 public을 지워야한다.
public int su1=1111;
int su2=2222;
private int su3=3333;
private static int su4=4444;
public Lec01(){
}
public void func01(){
System.out.println(su3);
}
}
public class Ex01 {
public static void main(String[] args) {
//접근제한자
//열린 정도 : public > protected=> default > private
//public 모두 접근 허용 (클래스- 한 문서에 오직하나, 변수, 메소드, 생성자)
//protected - default와 동일. 단 상속시에는 상관 없음(동일 패키지 아니어도 접근가능)
//default - 클래스, 변수, 메소드, 생성자)
//private-외부에서 접근 불허(static, non-static 상관없이 변수,메서드,생성자까지 붙을 수 있다)
Lec01 ex01=new Lec01();
System.out.println(ex01.su1);
System.out.println(ex01.su2);
System.out.println(ex01.su3);
System.out.println(Lec01.su4);
ex01.func01();
}
}
클래스에는 only public or default. (private은 붙어봤자 의미가 없어서인듯)