【Java】액세스 한정자 public과 무지정의 필드 액세스를 시도했다【Eclipse】
클래스에 사용할 액세스 한정자
액세스 한정자
설명
공개
어디서나 액세스 가능
무지정
이 패키지 내에서만 액세스 가능
멤버 (필드 메서드)에 사용할 액세스 한정자
액세스 한정자
설명
공개
어디서나 액세스 가능
protected
같은 패키지내와 서브 클래스로부터 액세스 가능
무지정
이 패키지 내에서만 액세스 가능
private
같은 클래스 내에서만 액세스 가능
클래스에 무지정으로 멤버에게 private라면 어떻게 될까?
작성한 파일은 아래와 같다.
수업
파일 이름
main 클래스
Modifier.java(main 폴더)
public 클래스
Pub.java(test 폴더)
무지정 클래스
None.java(test 폴더)
Modifier.java (메인 메소드를 기재)package main;
import test.None; // Eclipseで実行時に削除されました
import test.Pub;
public class Modifier {
public static void main(String[] args) {
Pub pubclass = new Pub();
None noneclass = new None();
System.out.println(pubclass.pubpub);
System.out.println("publicクラスのprotectedフィールドにアクセス");
System.out.println(pubclass.pubpro);
System.out.println("publicクラスの無指定フィールドにアクセス");
System.out.println(pubclass.pubnone);
System.out.println("publicクラスのprivateフイールドにアクセス");
System.out.println(pubclass.pubpri);
System.out.println("無指定クラスのpublicフィールドにアクセス");
System.out.println(noneclass.nonepub);
System.out.println("無指定クラスのprotectedフィールドにアクセス");
System.out.println(noneclass.nonepro);
System.out.println("無指定クラスの無指定フィールドにアクセス");
System.out.println(noneclass.nonenone);
System.out.println("無指定クラスのprivateフィールドにアクセス");
System.out.println(noneclass.nonepri);
}
}
Pub.javapackage test;
public class Pub {
public String pubpub = "pubpub";
protected String pubpro = "public proteced";
String pubnone = "public none";
private String pubpri = "pubpri";
}
None.javapackage test;
class None {
public String nonepub = "nonepub";
protected String nonepro = "nonepro";
String none = "nonenone";
private String nonepri = "nonepri";
}
익명 클래스는 가져올 수 없습니다!
위에서도 코멘트로 쓴대로, Modifier.java 안에
import test.None;
라고 썼는데, Eclipse에서 실행하면 삭제되었습니다. 콘솔의 에라~메시지는
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
None を型に解決できません
None を型に解決できません
フィールド Pub.pubpro は不可視です
フィールド Pub.pubnone は不可視です
フィールド Pub.pubpri は不可視です
at main.Modifier.main(Modifier.java:8)
public-public이면 문제 없음
Pub.java// public以外をコメントアウトしました
package test;
public class Pub {
public String pubpub = "pubpub";
// protected String pubpro = "public proteced";
// String pubnone = "public none";
// private String pubpri = "pubpri";
}
None.java// public修飾子をクラスに追加しました
// public以外をコメントアウトしました
package test;
public class None {
public String nonepub = "nonepub";
// protected String nonepro = "nonepro";
// String none = "nonenone";
// private String nonepri = "nonepri";
}
Modifier.java// 出力を全部コメントアウトにしました
// パッケージのpublic修飾子のフィールドだけ呼び出すように追加しました
package main;
import test.None; // publicクラスにしたので消されずインポートできるようになりました
import test.Pub;
public class Modifier {
public static void main(String[] args) {
Pub pubclass = new Pub();
None noneclass = new None();
System.out.println(pubclass.pubpub);
System.out.println(noneclass.nonepub);
// System.out.println(pubclass.pubpub);
// System.out.println("publicクラスのprotectedフィールドにアクセス");
// System.out.println(pubclass.pubpro);
// System.out.println("publicクラスの無指定フィールドにアクセス");
// System.out.println(pubclass.pubnone);
// System.out.println("publicクラスのprivateフイールドにアクセス");
// System.out.println(pubclass.pubpri);
// System.out.println("無指定クラスのpublicフィールドにアクセス");
// System.out.println(noneclass.nonepub);
// System.out.println("無指定クラスのprotectedフィールドにアクセス");
// System.out.println(noneclass.nonepro);
// System.out.println("無指定クラスの無指定フィールドにアクセス");
// System.out.println(noneclass.nonenone);
// System.out.println("無指定クラスのprivateフィールドにアクセス");
// System.out.println(noneclass.nonepri);
}
}
실행 결과pubpub
nonepub
오류가 발생하지 않고 실행할 수 있습니다.
결론
액세스 한정자
설명
공개
어디서나 액세스 가능
protected
같은 패키지내와 서브 클래스로부터 액세스 가능
무지정
이 패키지 내에서만 액세스 가능
private
같은 클래스 내에서만 액세스 가능
클래스에 무지정으로 멤버에게 private라면 어떻게 될까?
작성한 파일은 아래와 같다.
수업
파일 이름
main 클래스
Modifier.java(main 폴더)
public 클래스
Pub.java(test 폴더)
무지정 클래스
None.java(test 폴더)
Modifier.java (메인 메소드를 기재)package main;
import test.None; // Eclipseで実行時に削除されました
import test.Pub;
public class Modifier {
public static void main(String[] args) {
Pub pubclass = new Pub();
None noneclass = new None();
System.out.println(pubclass.pubpub);
System.out.println("publicクラスのprotectedフィールドにアクセス");
System.out.println(pubclass.pubpro);
System.out.println("publicクラスの無指定フィールドにアクセス");
System.out.println(pubclass.pubnone);
System.out.println("publicクラスのprivateフイールドにアクセス");
System.out.println(pubclass.pubpri);
System.out.println("無指定クラスのpublicフィールドにアクセス");
System.out.println(noneclass.nonepub);
System.out.println("無指定クラスのprotectedフィールドにアクセス");
System.out.println(noneclass.nonepro);
System.out.println("無指定クラスの無指定フィールドにアクセス");
System.out.println(noneclass.nonenone);
System.out.println("無指定クラスのprivateフィールドにアクセス");
System.out.println(noneclass.nonepri);
}
}
Pub.javapackage test;
public class Pub {
public String pubpub = "pubpub";
protected String pubpro = "public proteced";
String pubnone = "public none";
private String pubpri = "pubpri";
}
None.javapackage test;
class None {
public String nonepub = "nonepub";
protected String nonepro = "nonepro";
String none = "nonenone";
private String nonepri = "nonepri";
}
익명 클래스는 가져올 수 없습니다!
위에서도 코멘트로 쓴대로, Modifier.java 안에
import test.None;
라고 썼는데, Eclipse에서 실행하면 삭제되었습니다. 콘솔의 에라~메시지는
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
None を型に解決できません
None を型に解決できません
フィールド Pub.pubpro は不可視です
フィールド Pub.pubnone は不可視です
フィールド Pub.pubpri は不可視です
at main.Modifier.main(Modifier.java:8)
public-public이면 문제 없음
Pub.java// public以外をコメントアウトしました
package test;
public class Pub {
public String pubpub = "pubpub";
// protected String pubpro = "public proteced";
// String pubnone = "public none";
// private String pubpri = "pubpri";
}
None.java// public修飾子をクラスに追加しました
// public以外をコメントアウトしました
package test;
public class None {
public String nonepub = "nonepub";
// protected String nonepro = "nonepro";
// String none = "nonenone";
// private String nonepri = "nonepri";
}
Modifier.java// 出力を全部コメントアウトにしました
// パッケージのpublic修飾子のフィールドだけ呼び出すように追加しました
package main;
import test.None; // publicクラスにしたので消されずインポートできるようになりました
import test.Pub;
public class Modifier {
public static void main(String[] args) {
Pub pubclass = new Pub();
None noneclass = new None();
System.out.println(pubclass.pubpub);
System.out.println(noneclass.nonepub);
// System.out.println(pubclass.pubpub);
// System.out.println("publicクラスのprotectedフィールドにアクセス");
// System.out.println(pubclass.pubpro);
// System.out.println("publicクラスの無指定フィールドにアクセス");
// System.out.println(pubclass.pubnone);
// System.out.println("publicクラスのprivateフイールドにアクセス");
// System.out.println(pubclass.pubpri);
// System.out.println("無指定クラスのpublicフィールドにアクセス");
// System.out.println(noneclass.nonepub);
// System.out.println("無指定クラスのprotectedフィールドにアクセス");
// System.out.println(noneclass.nonepro);
// System.out.println("無指定クラスの無指定フィールドにアクセス");
// System.out.println(noneclass.nonenone);
// System.out.println("無指定クラスのprivateフィールドにアクセス");
// System.out.println(noneclass.nonepri);
}
}
실행 결과pubpub
nonepub
오류가 발생하지 않고 실행할 수 있습니다.
결론
package main;
import test.None; // Eclipseで実行時に削除されました
import test.Pub;
public class Modifier {
public static void main(String[] args) {
Pub pubclass = new Pub();
None noneclass = new None();
System.out.println(pubclass.pubpub);
System.out.println("publicクラスのprotectedフィールドにアクセス");
System.out.println(pubclass.pubpro);
System.out.println("publicクラスの無指定フィールドにアクセス");
System.out.println(pubclass.pubnone);
System.out.println("publicクラスのprivateフイールドにアクセス");
System.out.println(pubclass.pubpri);
System.out.println("無指定クラスのpublicフィールドにアクセス");
System.out.println(noneclass.nonepub);
System.out.println("無指定クラスのprotectedフィールドにアクセス");
System.out.println(noneclass.nonepro);
System.out.println("無指定クラスの無指定フィールドにアクセス");
System.out.println(noneclass.nonenone);
System.out.println("無指定クラスのprivateフィールドにアクセス");
System.out.println(noneclass.nonepri);
}
}
package test;
public class Pub {
public String pubpub = "pubpub";
protected String pubpro = "public proteced";
String pubnone = "public none";
private String pubpri = "pubpri";
}
package test;
class None {
public String nonepub = "nonepub";
protected String nonepro = "nonepro";
String none = "nonenone";
private String nonepri = "nonepri";
}
위에서도 코멘트로 쓴대로, Modifier.java 안에
import test.None;
라고 썼는데, Eclipse에서 실행하면 삭제되었습니다. 콘솔의 에라~메시지는
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
None を型に解決できません
None を型に解決できません
フィールド Pub.pubpro は不可視です
フィールド Pub.pubnone は不可視です
フィールド Pub.pubpri は不可視です
at main.Modifier.main(Modifier.java:8)
public-public이면 문제 없음
Pub.java// public以外をコメントアウトしました
package test;
public class Pub {
public String pubpub = "pubpub";
// protected String pubpro = "public proteced";
// String pubnone = "public none";
// private String pubpri = "pubpri";
}
None.java// public修飾子をクラスに追加しました
// public以外をコメントアウトしました
package test;
public class None {
public String nonepub = "nonepub";
// protected String nonepro = "nonepro";
// String none = "nonenone";
// private String nonepri = "nonepri";
}
Modifier.java// 出力を全部コメントアウトにしました
// パッケージのpublic修飾子のフィールドだけ呼び出すように追加しました
package main;
import test.None; // publicクラスにしたので消されずインポートできるようになりました
import test.Pub;
public class Modifier {
public static void main(String[] args) {
Pub pubclass = new Pub();
None noneclass = new None();
System.out.println(pubclass.pubpub);
System.out.println(noneclass.nonepub);
// System.out.println(pubclass.pubpub);
// System.out.println("publicクラスのprotectedフィールドにアクセス");
// System.out.println(pubclass.pubpro);
// System.out.println("publicクラスの無指定フィールドにアクセス");
// System.out.println(pubclass.pubnone);
// System.out.println("publicクラスのprivateフイールドにアクセス");
// System.out.println(pubclass.pubpri);
// System.out.println("無指定クラスのpublicフィールドにアクセス");
// System.out.println(noneclass.nonepub);
// System.out.println("無指定クラスのprotectedフィールドにアクセス");
// System.out.println(noneclass.nonepro);
// System.out.println("無指定クラスの無指定フィールドにアクセス");
// System.out.println(noneclass.nonenone);
// System.out.println("無指定クラスのprivateフィールドにアクセス");
// System.out.println(noneclass.nonepri);
}
}
실행 결과pubpub
nonepub
오류가 발생하지 않고 실행할 수 있습니다.
결론
// public以外をコメントアウトしました
package test;
public class Pub {
public String pubpub = "pubpub";
// protected String pubpro = "public proteced";
// String pubnone = "public none";
// private String pubpri = "pubpri";
}
// public修飾子をクラスに追加しました
// public以外をコメントアウトしました
package test;
public class None {
public String nonepub = "nonepub";
// protected String nonepro = "nonepro";
// String none = "nonenone";
// private String nonepri = "nonepri";
}
// 出力を全部コメントアウトにしました
// パッケージのpublic修飾子のフィールドだけ呼び出すように追加しました
package main;
import test.None; // publicクラスにしたので消されずインポートできるようになりました
import test.Pub;
public class Modifier {
public static void main(String[] args) {
Pub pubclass = new Pub();
None noneclass = new None();
System.out.println(pubclass.pubpub);
System.out.println(noneclass.nonepub);
// System.out.println(pubclass.pubpub);
// System.out.println("publicクラスのprotectedフィールドにアクセス");
// System.out.println(pubclass.pubpro);
// System.out.println("publicクラスの無指定フィールドにアクセス");
// System.out.println(pubclass.pubnone);
// System.out.println("publicクラスのprivateフイールドにアクセス");
// System.out.println(pubclass.pubpri);
// System.out.println("無指定クラスのpublicフィールドにアクセス");
// System.out.println(noneclass.nonepub);
// System.out.println("無指定クラスのprotectedフィールドにアクセス");
// System.out.println(noneclass.nonepro);
// System.out.println("無指定クラスの無指定フィールドにアクセス");
// System.out.println(noneclass.nonenone);
// System.out.println("無指定クラスのprivateフィールドにアクセス");
// System.out.println(noneclass.nonepri);
}
}
pubpub
nonepub
그렇게 될까 생각합니다.
무지정 클래스는 철벽의 방어
public 클래스에서도 public 이외의 멤버는 철벽의 보호
그렇다면 괜찮습니까?
무지정 클래스는 패키지 밖에서는 사용할 수 없기 때문에, 패키지내에서만 사용할 수 있다고 하는 것이기 때문에, 추상 클래스등에서 상속등으로 사용하는 것일까요. 그 근처가 아직 모호하지만,,,
원래 Eclipse로 쓰고 있을 때마다 붉은 물결로 오류를 알려주었습니다. 그 편리함을 깨달은 것만으로도 써 보았던 가치는 있었습니다.
우선
초보자의 참고에 익숙해지면 다행입니다!
Reference
이 문제에 관하여(【Java】액세스 한정자 public과 무지정의 필드 액세스를 시도했다【Eclipse】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mako0104/items/aaed6a6e8308b616525e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)