Java 重写方法并使其表现为静态
我有一个现有的框架,我不能更改,它读取2个属性 ClassA=somepackage.animImplementationofInterfaceA ClassB=somepackage.AnImplementationOfInterfaceB 在新类a上调用公共方法a,在新类B上按顺序调用公共方法B 我想让C类实现接口a、B,并为D类提供钩子methodC1、methodC2来覆盖methodA和methodB,其中包含大量样板文件和复杂的实现——methodC1和methodC2将封装业务逻辑。那么我的财产将是 ClassA=somepackage.classD ClassB=somepackage.classD 问题是,实现类D的人可能会编写类似以下内容:Java 重写方法并使其表现为静态,java,oop,design-patterns,Java,Oop,Design Patterns,我有一个现有的框架,我不能更改,它读取2个属性 ClassA=somepackage.animImplementationofInterfaceA ClassB=somepackage.AnImplementationOfInterfaceB 在新类a上调用公共方法a,在新类B上按顺序调用公共方法B 我想让C类实现接口a、B,并为D类提供钩子methodC1、methodC2来覆盖methodA和methodB,其中包含大量样板文件和复杂的实现——methodC1和methodC2将封装业务逻辑
class D extends class C
{
private int foo; //must be non-static due to multi-threaded new Class D() calls going on
int methodC1() {this.foo = read number from network}
methodC2(int x) {y = this.foo;} //methodC2 is always called after methodC1
//methodA, methodB implementation inherited from C
}
但这并不像预期的那样有效,因为框架实际上每次在调用methodA、methodB之前都会创建一个新的D类对象,因此不能依赖于使用this引用
将methodC1、methodC2定义为静态也不起作用,因为这样对methodC1的调用就绑定到C中的实现,而不是D中被重写的实现
真正应该写的是:
class D extends class C
{
int methodC1() {return number from network;}
methodC2(int x) {y = x} //here y is using the return value of methodC1
//methodA, methodB implementation inherited from C
}
我还希望只有methodC1、methodC2是可重写的,即在D上工作的程序员不能干扰methodA
理想的设计应该是
属性仅引用一个类
方法1,方法2在那个班
挑战摘要
在方法1,方法2中没有这个
无法使methodC1、methodC2处于静态状态
Properties只接受一个可实例化的类
如何设计这个框架?这是可以解决的吗?您可以更改methodC1、methodC2的签名。组合!建立一个你可以接受的界面
该类将包含Method1和D2的逻辑,对于其他所有内容,只需对当前现有类中的其他方法进行简单调用即可。人们将无法修改调用以更改底层逻辑。静态方法不能被覆盖
如果子类定义的静态方法与超类中的静态方法具有相同的签名,则子类中的方法将隐藏超类中的方法。隐藏和重写之间的区别具有重要意义。不能使静态方法可重写。是的。我的设计问题的关键似乎是限制一个方法使用它,但使其可重写。如果我理解正确,您的意思是:定义包含methodC1、methodC2的类E。C类有一个成员E。那么C会调用e.methodC1和e.methodC2?但问题是如何将e转换成C?当我设置属性时,框架调用new C.methodA,然后调用new C.methodB。