private仅允许类内部访问,体现严格封装;protected允许子类及同包类访问,平衡封装与继承需求。

在Java里,
private
protected
private
protected
我个人在写Java代码时,对这两个修饰符的理解和使用,往往是基于一种“责任”和“信任”的考量。
private
private
private
private
private
而
protected
private
public
protected
protected
BaseService
UserService
ProductService
protected
public
立即学习“Java免费学习笔记(深入)”;
当然,这种“信任”也伴随着风险。子类一旦访问了
protected
protected
protected
public
// 简单示例
package com.example.base;
public class Animal {
private String name; // 只有Animal类能访问
protected int age; // Animal及其子类,以及com.example.base包内的其他类能访问
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
private void secretMethod() {
System.out.println(name + " has a secret.");
}
protected void introduce() {
System.out.println("Hi, I'm " + name + " and I'm " + age + " years old.");
secretMethod(); // Animal类内部可以调用private方法
}
}package com.example.derived; // 不同的包
import com.example.base.Animal;
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
public void bark() {
// System.out.println(name + " barks!"); // 错误:name是private,子类不能直接访问
System.out.println("Dog named " + this.age + " barks!"); // 正确:age是protected,子类可以访问
introduce(); // 正确:introduce是protected,子类可以访问
// secretMethod(); // 错误:secretMethod是private,子类不能访问
}
}package com.example.base; // 同一个包
public class ZooKeeper {
public void feed(Animal animal) {
// System.out.println("Feeding " + animal.name); // 错误:name是private
System.out.println("Feeding animal of age " + animal.age); // 正确:age是protected,同包可访问
animal.introduce(); // 正确:introduce是protected,同包可访问
}
}private
protected
这确实是个好问题,初学者可能会觉得,一个
public
private
protected
private
private
public
private
而
protected
以上就是Java中private和protected修饰符的区别的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号