Day33--属性的修饰符

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修饰的属性只能在其所属的类内部被访问。这是一种最严格的访问控制级别,用于隐藏类的内部实现细节。
    • 示例:创建Person类,私有属性age,setAge、getAge方法
    • 在main方法中赋值给age,调用setAge、getAge方法
    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中)访问和修改。但是如果在其他包中的类想要访问这个属性,就会受到限制。

posted @ 2024-11-18 18:12  1hahahahahahahaha  阅读(2)  评论(0编辑  收藏  举报