也许我没有看到它,但是我想不出这会引起什么问题,因为无法实例化扩展抽象类的静态类,但是也许我应该使用一种设计模式来代替。
以下是我所谈论的例子:
public class PetTrainer
{
public PetTrainer(...)
{...}
public static class LeashInstruction extends LeashInstructionAbstract
{
//No Code
}
}
在同一包装内:
abstract class LeashInstructionAbstract
{
public static void giveTreat(...)
{...}
public static...
//imagine more
}
答案 0 :(得分:0)
仅是为了阐明静态方法是在子类中继承的,但是它不是多态的,因为您无法覆盖它们,尽管您可以在子类中使用具有相同签名的方法时将其隐藏。如果您想使环境更整洁,则无需创建一个空的静态类。 这是根据您想要实现的两个建议。 1.如果所有宠物训练师的皮带说明相同,则可以执行以下操作:
public class PetTrainer
{
public PetTrainer(...)
{...}
}
和:
abstract class LeashInstructionAbstract {
public static void giveTreat() {}
}
如果在PetTrainer类中行为会发生变化,那么我建议执行以下操作(与抽象方法接口):
公共类PetTrainer { LeashInstructionImpl leashInstruction =新的LeashInstructionImpl(); 公共PetTrainer(){ }
public static class LeashInstructionImpl implements LeashInstruction {
@Override
public void giveTreat() {
//somthing
}
}
// Just for testing
public static void main(String[] args) {
PetTrainer petTrainer = new PetTrainer();
petTrainer.leashInstruction.giveTreat();
}
}
皮带指令将为:
界面LeashInstruction {
void GiveTreat();
//想象更多
}
希望这会有所帮助。
答案 1 :(得分:0)
当我回顾我年轻时的这个问题并试图回答它时,这个策略有很多问题。第一个也是最大的问题是它给我的 ide 带来的负担,如果我必须这样做的话,复制/粘贴所有这些类会花费很长时间。正如@GhostCat 正确指出的那样,这种策略的第二个问题是设计有一些可疑的东西,它不是 OOP。如果您在 Java 中执行此操作,那么您不妨切换到函数式语言,因为它会更有效率。这种策略是 OOP 的变种,变得难以管理。