gpt4 book ai didi

Java - 扩展子类中的私有(private)方法

转载 作者:行者123 更新时间:2023-12-01 22:41:30 26 4
gpt4 key购买 nike

我遇到了扩展/更改子类中的私有(private)方法的麻烦。例如,我正在创建一个继承自父类(super class)的模拟对象,以便在测试中使用。

这是我想要更改的父类代码的示例:

 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 ;
}
}

我知道私有(private)方法不能在子类中被覆盖。因此,我应该创建一个具有相同签名的新方法。我是否还必须重新创建此类中的所有私有(private)变量?但如果我这样做,我不确定这是否会改变行为与父类不同,因为我知道空间实际上是为子类中父类的私有(private)变量保留的。因此,我会有重复的私有(private)变量。我不知道解决这个问题的最佳方法是什么。

最佳答案

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

考虑 Strategy Pattern 的设计。基本上,不需要重写 private 方法,因为这些方法应该为接口(interface)之外的事物保留,并且仅特定于该特定的具体类。

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

关于Java - 扩展子类中的私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070226/

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