访问其他包中的受保护方法?

发布于 2024-09-08 03:07:39 字数 477 浏览 3 评论 0原文

如果我说

class A{
}

那么它隐式继承了 Object 类。所以我的类如下:

class A{

       protected Object clone(){
       }  /// Here i am not overridning
       //All the other methods (toString/wait/notify/notifyAll/getClass)
}

现在为什么我不能访问类 B 中的 clone() 方法,该方法位于类 A 的同一包中。

Class B{
       A a = new A();
       a.clone();
       **
}

//** 说克隆受到保护在对象类中。但我没有访问对象的克隆方法。无论如何,我在这里调用 A 类的克隆方法,但我还没有重载。

If I say

class A{
}

then it implicitly inherits Object class.So I am having the class as below:

class A{

       protected Object clone(){
       }  /// Here i am not overridning
       //All the other methods (toString/wait/notify/notifyAll/getClass)
}

Now Why cant I access the clone() method in Class B which is in the same package of class A.

Class B{
       A a = new A();
       a.clone();
       **
}

//** Says clone is protected in Object class . But I am not accessing Object's clone method .Here I am invoking class A's clone method anyway which I havn't overloaded yet.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心房的律动 2024-09-15 03:07:39

protected 方法是在 java.lang.Object 中定义的,因此您无法从另一个包中调用它 - 只能从子类中调用。

您在对 A 的引用上调用它,但它是 java.lang.Object 的方法,直到您覆盖它。

当重写clone()时,您应该将修饰符更改为public并实现Cloneable。然而,使用clone()方法并不是一个好主意,因为它很难正确实现。使用 commons-beanutils 进行浅克隆。

确保区分“覆盖”和“重载”。

The protected method is defined in the java.lang.Object, so you can't invoke it from another package - only from subclasses.

You are calling it on a a reference to A but it is a method of java.lang.Object, until you override it.

When overriding clone(), you should change the modifier to public and implement Cloneable. However using the clone() method is not a good idea, because it's very hard to implement it correctly. Use commons-beanutils to make shallow clones.

Make sure you make distinction between "overriding" and "overloading".

这完美的工作

class A{

       protected Object clone(){
           return this;
       }  
}

public class B{
       public B() {
           A a = new A();
           a.clone();
           System.out.println("success");
       }
       public static void main(String[] args) {
        new B();
    }

}

this perfectly work

class A{

       protected Object clone(){
           return this;
       }  
}

public class B{
       public B() {
           A a = new A();
           a.clone();
           System.out.println("success");
       }
       public static void main(String[] args) {
        new B();
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文