gpt4 book ai didi

java - 为什么无法在同一包中使用继承访问 protected clone() 方法

转载 作者:行者123 更新时间:2023-11-30 08:09:40 25 4
gpt4 key购买 nike

我知道通过继承,所有类都从 Object 类继承方法。类似地,如果我们用另一个类扩展一个类,它也会继承方法。那么为什么我们可以调用其他类继承的protected方法而不能调用Object类的inheritate方法

package com.core.test;

public class CloneableTest {
public static void main(String[] args) {
Testclass test= new Testclass();

test.someClassSpecificMethod();
test.clone(); //ERROR AT tHIS LINE why
}
}

class SomeClass implements Cloneable {

protected void someClassSpecificMethod(){

}
}

class Testclass extends SomeClass {

}

在上面的文件中,因为我可以使用 Testclass 的实例访问 someClassSpecificMethod 那么为什么我不能访问克隆方法?

最佳答案

因为 clone 没有在与 CloneableTest 位于同一包中的类中定义,而 someClassSpecificMethod 是。一个类只能访问它从父类继承的 protected 方法,即使它继承自与另一个类相同的父类,它仍然不能访问另一个类的方法。这完全符合 protected 背后的意图:它是基类提供给它的子类而不是类的客户的公共(public) API。

因为 protected 比 package-private 更宽,你总是可以访问一个 protected 方法,如果它是 package-private 你可以访问,就是这种情况使用 someClassSpecificMethod

关于java - 为什么无法在同一包中使用继承访问 protected clone() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32289755/

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