Java 中 protected 和 default 访问控制的区别为:default 可见性仅限于同包,而 protected 可见性包括同包及子类。default 无法被子类继承,而 protected 可以。default 无法被其他包访问,而 protected 可以被同包和子类访问。
protected 与 default 访问控制
问题:Java 中 protected 和 default 访问控制之间的区别是什么?
回答:
protected 和 default 访问控制是 Java 中用于限制类、方法和字段可见性的两个访问控制修饰符。它们的区别如下:
可见性范围:
- default:仅在声明类及其同包内的子类和类中可见。
- protected:除了 default 访问范围之外,还允许访问子类(无论它们在哪个包中)。
继承:
- default:子类无法继承具有 default 访问权限的成员,除非子类和父类在同一包中。
- protected:子类总是可以继承具有 protected 访问权限的成员,无论子类和父类是否在同一包中。
访问:
- default:具有 default 访问权限的成员不能从其他包访问。
- protected:具有 protected 访问权限的成员可以在同一个包中访问,也可以从子类(无论它们在哪个包中)访问。
示例:
// default 访问权限
class Animal {
int age; // default 访问权限
}
// 另一个包中的类
class Farm {
// 无法访问 Animal 中的 age 变量,因为 Farm 和 Animal 不在同一个包中
}
// protected 访问权限
class Mammal extends Anima
l {
boolean hasFur; // protected 访问权限
}
// 另一个包中的类
class Elephant extends Mammal {
// 可以访问 hasFur 变量,因为 Elephant 是 Mammal 的子类
}其他要点:
- default 访问权限有时也称为“package-private”,因为它的可见性仅限于当前包。
- protected 访问权限比 default 访问权限更宽松,因为它允许子类访问。
- 对于需要在子类中访问且不应从其他包访问的成员,通常使用 protected 访问权限。

l {
boolean hasFur; // protected 访问权限
}
// 另一个包中的类
class Elephant extends Mammal {
// 可以访问 hasFur 变量,因为 Elephant 是 Mammal 的子类
}






