我们在代码中做演示
创建Person类,以Person类为主线,验证它的成员函数和成员变量在不同类、包、子类情况下的访问权限
我们先为Person类创建private修饰的成员变量,测试在同一个类中是否可以使用
package example; public class Person { private String name; public static void main(String[] args) { Person person = new Person(); person.name = "艾边成"; } }
编译器未报错,表示说private修饰的成员变量可以在同一个类中被调用
编译器报错,表示说private修饰的成员变量不能在同一个包中使用
这样看来,修饰符 private 的作用是很强的,只用在自己的类中才能被访问,超过了这个类,谁都不行
default 是默认修饰符,即成员函数或成员变量前没有修饰符时,默认访问权限为 default
package example; public class Person { String gender; //性别 无修饰符,默认为 default(默认) public static void main(String[] args) { Person person = new Person(); person.gender = "男"; } }
当在同一个包下尝试调用时
package example; public class TestPerson { public static void main(String[] args) { Person person = new Person(); person.gender = "女"; } }
编译器未报错,可正常调用
编译器显示正常,但是值得注意的是,此时子类和我们的Person类在同一个包下,可归为上一种情况
当然此处的“子类”一定指和父类不在同一个包,我们用 import 导入所在的包中需要的类
三、protected
同样的方法,我们选择不同的位置逐个去测试
package example; public class Person { protected int age; public static void main(String[] args) { Person person = new Person(); person.age = 18; } }
同一个类中没有问题
package example; public class TestPerson { public static void main(String[] args) { Person person = new Person(); person.age = 18; } }
同一个包中没有问题
编译器报错,这不符合我们的预期:在子类中是可以访问到protected的
老师告诉我们(后续我们会做出解释):不同包下的对象,不能直接通过父类对象去访问
package other; import example.Person; public class Student extends Person{ public static void main(String[] args) { Person person = new Person(); Student student = new Student(); student.age = 18; } }
显示正常,用protected修饰的属性,子类可以继承过来,不在父类同一个包下也是可以继承访问到的
package example; public class Student extends Person{ public static void main(String[] args) { Person person = new Person(); person.age = 18; Student student = new Student(); student.age = 18; } }
四、public
任何地方都可以访问到
Java面向对象之包和内部类_基础课程_华为云学院_云计算培训-华为云 (huaweicloud.com)