Java-无法访问嵌套类扩展的超类的保护方法
我是Java的新手,并掌握了受保护的可见性。
我有Altera A的A类方法1,如下所示 -
public abstract class A {
public A(...){}
protected void method1(){
// do something
}
现在我有另一个B级B级。B类具有嵌套的静态类,D级扩展A类A级
public class B extends C {
public B(...){
super(...);
}
private static class D extends A {
D(...){super(...);}
}
public void method2() {
D record = new D();
record.method1(); // need to access the protected method1 of class A, which is the superclass of nested class D. Getting the error here
}
}
I i Carter i Carter i Cerfor i Cerfor this Orror -Method1在A类中保护了访问 现在我的问题是如何访问方法1?我无法将其更改为A类公开
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要在D类中创建代理方法,如下所述。 D类可以访问A类的受保护方法,但是D类的实例无法直接调用受保护的方法,并且必须具有代理方法来调用超级类的受保护方法。
在D类中,您需要为A类中的方法创建一个公共Getter,因此:
You need to create a proxy method in class D as outlined below. Class D can access Class A's protected methods, but an instance of Class D can't call protected methods directly, and must have a proxy method to call the protected method of the super class.
In class D, you need to create a public getter for the method in Class A, so:
由于A.Method1()受到保护,因此只能从
A. 的同一类/相同的包装/子女访问A. A
解决方案将包装器用作@Alex Ander或更改A.Method1()的更改修饰符,向public
Since A.method1() is protected, it is only accessible from same class/same package/child of A.
In your code, your are calling A.method1() in B, that is not accessible if B not in same package as A
The solution is using a wrapper as @Alex Ander or change modifier of A.method1() to public
问题是由受保护的
method1()
从Method2()
属于B的B和D之外的B,B不在同一软件包中的B。使用或D。 ,其继承类或来自同一软件包。
这就是为什么当在D内部创建包装器方法时,问题解决了,因为受保护的
Method1()
是从内部调用的。我们仍然可以覆盖受保护的
method1()
A并在必要时通过D公开。 (从上面的包装器示例修改)The problem was caused by the protected
method1()
called frommethod2()
, which belongs to B, which is outside A and D, and B is not in the same package with A or D.The
method1()
should only used/called inside A or D. That's whatprotected
is used for, to ensure it is used only in the owner class, its inheriting classes or from the same package.That's why when the wrapper method created inside D, the problem solved, since the protected
method1()
is called from inside D.We still can override the protected
method1()
of A and make it public through D if necessary. (Modified from the wrapper example above)