java 保护类型_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 {

@HotSpotIntrinsicCandidate

protected native Object clone() throws CloneNotSupportedException;

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部