【问题标题】:Overrite method from external or private class覆盖外部或私有类的方法
【发布时间】:2016-12-23 16:39:54
【问题描述】:

我有一些方法使用外部库 (mvn) 中的方法。所以我不能修改它。当我尝试覆盖该方法时,我得到:

void 在 *class 中不公开;无法从外部访问错误 包裹 无权访问该外部库

关于如何覆盖扩展抽象类或具有私有方法的类的外部类(库)中的方法的问题。

logout = new Class(arg1, arg2) { 
           @Override 
           public boolean ovMethod(){ 
               someMethod(true); 
} 

Method ovMethod() from (external class, maven下载) Class:

Class extends AbstractClass {

   public abstract class AbstractClass { 
        void someMethod(boolean arg) { 
        } 
   } 
}

【问题讨论】:

  • 一般来说,你不要覆盖它,这就是封装的重点。您可以尝试使用反射之类的东西,但这可能超出了您实际问题的范围。
  • 我希望你没有真的有一个名为Class的类,因为已经有java.lang.Class。一个更现实的例子会很有用。鉴于您没有显示任何私有方法,也不清楚您在谈论什么私有方法......如果您提供minimal reproducible example,这将非常有帮助。不过,我怀疑 Maven 是否相关。

标签: java maven


【解决方案1】:

一般来说,您不应该覆盖不应该被覆盖的方法。但是作为最后的手段,如果方法是包私有的(也就是默认可见性),您可以在同一个包中创建自己的类,以便它有权覆盖该方法:

package same.package_as.superclass;

public class MyClass extends Class {
    @Override
    void someMethod(boolean arg) {
        // custom implementation
    }
}

【讨论】:

    猜你喜欢
    • 2014-05-28
    • 1970-01-01
    • 2015-08-03
    • 2014-12-18
    • 2023-04-09
    • 2011-01-01
    • 2013-01-31
    相关资源
    最近更新 更多