Java 类的受保护访问(学习 Java 编程语言 046)

最好将类中的字段标记为 private,而方法标记为 public。任何声明为 private 的内容对其余类都是不可见的。这对子类来讲也彻底适用,即子类也不能访问超类的私有字段。java

Java 中的受保护部分对全部子类及同一个包中的全部其余类均可见。程序员

有时候可能但愿限制超类中的某个方法只容许子类访问,或者容许子类的方法访问超类的某个字段。须要将这些类方法或字段声明为受保护(protected)。例如,若是将超类 Employee 中的 hireDay 字段声明为 protected,而不是 private,Manager 类的方法就能够直接访问这个字段。ide

Employee 类设计

public class Employee {
    // 聘用日期
    protected LocalDate hireDay;

    ...
}

Employee 类的子类们:code

public class Manager extends Employee {...}

public class Programmer extends Employee {...}

在 Java 中,对象的保护字段只能由同一个包中的类访问。如今考虑一个 Programmer 子类,这个子类在另外一个不一样的包中。Programmer 类中的方法只能查看 Programmer 对象本身的 hireDay 字段,而不能查看其它 Employee 对象的这个字段。有了这个限制,就能避免滥用保护机制,不能经过派生子类的对象来访问超类对象的受保护的字段。对象

在实际应用中,要谨慎使用受保护字段。假设你的类要提供给其余程序员使用,而你在设计这个类时设置了一些受保护字段。你不知道的是,其余程序员可能会由这个类再派生出新类,并开始访问你的受保护字段。在这种状况下,若是你想修改你的类的实现,就势必会影响那些程序员。这违背了 OOP 提倡数据封装的精神。it

受保护的方法更具备实际意义。若是须要限制某个方法的使用,就能够将它声明为 protected。这代表子类(可能很熟悉祖先类)获得了信任,能够正确地使用这个方法,而其余类则不行。
这种方法的一个很好示例就是 Object 类中的 clone 方法。io

public class Object {
    @HotSpotIntrinsicCandidate
    protected native Object clone() throws CloneNotSupportedException;
}
相关文章
相关标签/搜索