Day33--属性的修饰符
Day33--属性的修饰符
-
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
的值。 - 含义:被
-
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
的值。 - 含义:
-
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
。 - 含义:
-
默认(没有修饰符)修饰符
- 含义:如果属性没有使用
public
、private
或protected
修饰,那么它具有默认的访问权限。默认访问权限的属性可以在同一个包中的其他类中被访问,但不能在不同包的类中直接访问。 - 示例:
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
中)访问和修改。但是如果在其他包中的类想要访问这个属性,就会受到限制。 - 含义:如果属性没有使用