java中protected和default的区别

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 Animal {
    boolean hasFur; // protected 访问权限
}

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

其他要点:

  • default 访问权限有时也称为“package-private”,因为它的可见性仅限于当前包。
  • protected 访问权限比 default 访问权限更宽松,因为它允许子类访问。
  • 对于需要在子类中访问且不应从其他包访问的成员,通常使用 protected 访问权限。