首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java -在子类中扩展私有方法

Java -在子类中扩展私有方法
EN

Stack Overflow用户
提问于 2014-09-27 00:51:12
回答 4查看 1.4K关注 0票数 0

我遇到了在子类中扩展/修改私有方法的麻烦。例如,我正在创建一个从超类继承的模拟对象,以便在测试中使用。

下面是我想要修改的父类的代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 private void build(int skill) {
        // switch screen
        state = Constants.STATE_GENERATING;
        percentdone = 0;
        notifyViewerRedraw() ;
        // select generation method
        switch(method){
        case 1 : mazebuilder = new MazeBuilderPrim(); // generate with Prim's algorithm
        break ;
        case 0: // generate with Falstad's original algorithm (0 and default), note the missing break statement
        default : mazebuilder = new MazeBuilder(); 
        break ;
        }
}

我知道在子类中不能重写私有方法。因此,我应该创建一个具有相同签名的新方法。我还需要重新创建这个类中的所有私有变量吗?但如果我这样做了,我不确定这是否会改变行为,使其与父类不同,因为我知道子类中的父类实际上为私有变量保留了空间。因此,我会有重复的私有变量。我不知道最好的方法是什么。

EN

回答 4

Stack Overflow用户

发布于 2014-09-27 00:57:20

如果您发现需要重写子类中的方法,也许该方法所负责的逻辑足够抽象,足以保证使用publicprotected方法。

考虑一下Strategy Pattern的设计。基本上,不应该需要覆盖private方法,因为这些方法应该保留给接口之外的东西,并且只特定于特定的具体类。

对于我来说,像build()这样完整和具体的东西听起来像是属于protected方法,您的最高超类可能会在构造过程中的某个时刻使用它,但不应该在外部调用它。当然,如果可以根据需要多次调用build() (幂等函数)是安全的,就像游戏角色类中的render()方法一样,那么将其公开并记录您对其实现的期望应该是安全的。

票数 2
EN

Stack Overflow用户

发布于 2014-09-27 01:05:42

尝试使用mocking API,例如Jmockit

使用它,可以省去很多手工模拟的麻烦,就像你用私有方法扩展类一样!祝好运。

票数 1
EN

Stack Overflow用户

发布于 2014-09-27 00:57:44

我不确定您的程序总体上是如何工作的,但如果您希望所有基类共享相同的方法(?),那么您可能值得研究一下抽象类和方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26070226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文