gpt4 book ai didi

java - 为什么 Java 中的 Object 类包含 protected 方法?

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:18 25 4
gpt4 key购买 nike

为什么 Object class在 Java 中包含 protected 方法,例如 clone()finalize() ,如果你使用或编写的所有类都继承了Object的实例方法?

最佳答案

如果类 C2 扩展 C1,并且 C1 包含一个 public 方法,那么 中的方法>C2(如果被覆盖)也必须是public; Java 规定在覆盖时对方法的访问施加额外限制是非法的。如果 C1 包含一个 protected 方法,那么 C2 中的重写方法可能是 protectedpublic

即使 C1Object 类,这些规则也适用。所以我认为原因是类(它们都继承自 Object)可以声明它们自己的重写 clonefinalize 方法并使它们 protected 如果他们选择,而不是 public

编辑: 这样做的一个重要后果是 clonefinalize 不像公共(public)成员那样可以自由访问。在 C2 类中,您可以根据需要对 C2 类型的对象使用 clonefinalize,因为它们是 protected 方法,因此可用于子类 C2。但是您不一定可以将它们用于另一个类的对象。

class X { }

class Y {
private Y field1;
private X field2;
public void foo() throws Exception {
Object o1 = this.clone(); // legal
Object o2 = field1.clone(); // legal
Object o3 = field2.clone(); // illegal
String s1 = field2.toString(); // legal since toString() is "public" in Object
}
}

这应该表明,尽 pipe 类可以访问 protected 方法,但它们的可访问性仍然存在一些限制。请注意,如果 X 具有 @Override public Object clone() 方法,则 o3 的声明将变得合法。

关于java - 为什么 Java 中的 Object 类包含 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com