AI智能
改变未来

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

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

Java 中的受保护部分对所有子类及同一个包中的所有其他类都可见。

有时候可能希望限制超类中的某个方法只允许子类访问,或者允许子类的方法访问超类的某个字段。需要将这些类方法或字段声明为受保护(protected)。例如,如果将超类 Employee 中的 hireDay 字段声明为 protected,而不是 private,Manager 类的方法就可以直接访问这个字段。

Employee 类

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

Employee 类的子类们:

public class Manager extends Employee {...}public class Programmer extends Employee {...}

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

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

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

public class Object {@HotSpotIntrinsicCandidateprotected native Object clone() throws CloneNotSupportedException;}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Java 类的受保护访问(学习 Java 编程语言 046)