Day33--屬性的修飾符

1hahahahahahahaha發表於2024-11-18

Day33--屬性的修飾符

  1. public修飾符

    • 含義:被public修飾的屬性可以在任何類中被訪問。這是一種最寬鬆的訪問控制級別。
    • 示例
    class Person {
        public String name;
    }
    public class Main {
        public static void main(String[] args) {
            Person p = new Person();
            p.name = "John";
            System.out.println(p.name);
        }
    }
    

    在這個例子中,Person類中的name屬性被宣告為public。在Main類的main方法中,可以直接訪問p.name來設定和獲取name的值。

  2. private修飾符

    • 含義private修飾的屬性只能在其所屬的類內部被訪問。這是一種最嚴格的訪問控制級別,用於隱藏類的內部實現細節。
    • 示例
    class Person {
        private int age;
        public void setAge(int newAge) {
            if (newAge > 0) {
                age = newAge;
            }
        }
        public int getAge() {
            return age;
        }
    }
    public class Main {
        public static void main(String[] args) {
            Person p = new Person();
            p.setAge(20);
            System.out.println(p.getAge());
        }
    }
    

    這裡Person類中的age屬性是private的。不能在Main類中直接訪問p.age,而是需要透過setAge方法來設定age的值,透過getAge方法來獲取age的值。

  3. protected修飾符

    • 含義protected修飾的屬性可以在其所屬的類內部、同一個包中的其他類以及該類的子類(無論子類是否在同一個包中)中被訪問。
    • 示例
    package com.example;
    class Parent {
        protected int protectedValue = 10;
    }
    class Child extends Parent {
        public void accessProtectedValue() {
            System.out.println(protectedValue);
        }
    }
    public class Main {
        public static void main(String[] args) {
            Child c = new Child();
            c.accessProtectedValue();
        }
    }
    

    在這個例子中,Parent類中的protectedValue屬性被protected修飾。Child類繼承自Parent類,可以在Child類的accessProtectedValue方法中訪問protectedValue。同時,Main類在同一個包(com.example)中,透過Child類的例項也可以間接訪問protectedValue

  4. 預設(沒有修飾符)修飾符

    • 含義:如果屬性沒有使用publicprivateprotected修飾,那麼它具有預設的訪問許可權。預設訪問許可權的屬性可以在同一個包中的其他類中被訪問,但不能在不同包的類中直接訪問。
    • 示例
    package com.example;
    class DefaultAccessClass {
        int defaultValue;
    }
    class AnotherClassInSamePackage {
        public void accessDefaultValue() {
            DefaultAccessClass dac = new DefaultAccessClass();
            dac.defaultValue = 5;
            System.out.println(dac.defaultValue);
        }
    }
    public class Main {
        public static void main(String[] args) {
            AnotherClassInSamePackage aci = new AnotherClassInSamePackage();
            aci.accessDefaultValue();
        }
    }
    

    這裡DefaultAccessClass中的defaultValue沒有修飾符,它可以被AnotherClassInSamePackage(在同一個包com.example中)訪問和修改。但是如果在其他包中的類想要訪問這個屬性,就會受到限制。

相關文章