--- id: java-non-access-modifiers title: "Java Non Access Modifiers" category: "Programming_Language" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: ["non-access modifiers", "자바 비접근 제어자"] duplicate_of: "" source_trust_level: "B" confidence_score: 0.88 created_at: 2026-07-04 updated_at: 2026-07-04 review_reason: "" merge_history: [] tags: ["java", "programming", "w3schools", "oop", "modifiers", "static", "abstract", "final"] raw_sources: ["https://www.w3schools.com/java/java_non_modifiers.asp"] applied_in: [] github_commit: "" --- # [[Java Non Access Modifiers]] ## 🎯 한 줄 통찰 (One-line insight) `static` methods "cannot use variables or methods that belong to an object" — this is the key limitation that separates them from instance methods, and it directly explains why `main()` (always static) needs an object to call any instance method inside it. [S1] ## 🧠 핵심 개념 (Core concepts) - **Non-access modifiers** — don't control visibility, but add other features; most common: `final`, `static`, `abstract`. [S1] - **`final`** — prevents attribute values from being overridden. [S1] - **`static`** — belongs to the class itself; callable without creating an object; shared across all instances; CANNOT access object-specific (instance) members. [S1] - **`abstract`** — an abstract method has no body; the body is provided by a subclass; only valid inside an abstract class. [S1] - **Class-level list** — for classes: `final` (cannot be inherited) or `abstract` (cannot instantiate directly). [S1] - **Member-level list** — `final`, `static`, `abstract`, `transient` (skipped during serialization), `synchronized` (one-thread-at-a-time access), `volatile` (always read from main memory, no thread-local caching). [S1] ## 📖 세부 내용 (Details) - Final attributes: `final int x = 10; final double PI = 3.14; ... myObj.x = 50; // Error`. [S1] - Static method call without object: `static void myStaticMethod() {...} ... myStaticMethod(); Main.myStaticMethod();`. [S1] - Abstract class/method: `abstract class Main { public abstract void study(); } class Student extends Main { public void study() { System.out.println("Studying all day long"); } }`. [S1] ## ⚖️ 모순 및 업데이트 (Contradictions & updates) - **static의 제약**: 클래스 자체에 속하므로 객체 없이 호출 가능하지만, 객체에 속한 변수/메서드는 사용할 수 없다는 점이 명시됨. [S1] ## 🛠️ 적용 사례 (Applied in summary) 현재 발견된 실제 적용 사례가 없습니다 — abstract 클래스/메서드는 상속(Inheritance)/추상화(Abstraction) 챕터에서 본격적으로 다뤄지는 개념의 예고편이다. [S1] ## 💻 코드 패턴 (Code patterns) Abstract class with subclass providing the method body (Java): ```java abstract class Main { public abstract void study(); // no body } class Student extends Main { public void study() { System.out.println("Studying all day long"); } } ``` ## ✅ 검증 상태 및 신뢰도 - **상태:** draft - **검증 단계:** conceptual - **출처 신뢰도:** B (W3Schools — widely used educational reference, not a primary standards body) - **신뢰 점수:** 0.88 - **중복 검사 결과:** 신규 생성 (New discovery) ## 🔗 지식 그래프 (Knowledge Graph) - **상위/루트:** [[Java Tutorial]] - **관련 개념:** [[Java Modifiers]], [[Java Inheritance]], [[Java Abstraction]], [[Java Constants Final]] - **참조 맥락:** static/abstract/final의 기초 — 상속/추상화 챕터에서 심화. ## 📚 출처 (Sources) - [S1] W3Schools — Java Non-Access Modifiers — https://www.w3schools.com/java/java_non_modifiers.asp ## 📝 변경 이력 (Change history) - 2026-07-04: Initial draft synthesized from the W3Schools "Java Non-Access Modifiers" page (Astra wiki-curation, P-Reinforce v3.1 format).