我有2个课程:
A类,包含很多功能。
Class A{
public void a(int param1, int param2);
public void b(String param1, int param2);
....}
B类也有相同的功能,但有些参数是多余的,
Class B{
public void a(int param1forB){}
public void b(String param1){}
....}
我有检查A类的测试。我也想对B类使用这些测试。
另外两个问题:
B
包含在某些A
类中实现的函数。例如,a
位于课程A1
中,而功能b
位于课程A2
我想最小化A中的变化(在B中,我可以改变我想要的任何东西)。
有什么想法吗?
答案 0 :(得分:0)
让B扩展A,然后覆盖您希望在B中具有不同行为的方法。如果您希望通过使用重载来更改B中方法的签名,请将该方法保留为公共。并确保在进行重载时删除IDE自动添加的@override注释。 对于多重继承,你是对的java不支持多类,所以你必须选择接口来做多继承
答案 1 :(得分:0)
您可以按照Template pattern
创建模板public abstract class templateClass
{
public abstract void a();
public abstract void b();
}
public class A extends templateClass
{
public void a() {
}
public void b() {
}
}
public class B extends A
{
}
答案 2 :(得分:0)
Interface
和Composition Over Inheritance
可以帮助您解决问题。示例(可能存在一些语法错误,自从我使用java以来已经很长时间了):
public interface IFunctionA{
void a(int param1, int param2);
void a(int param1);
}
public interface IFunctionB{
void b(String param1, int param2);
void b(String param1);
}
public class FunctionA implement IFunctionA{
public void a(int param1, int param2){
//do the function
}
}
// same with FunctionB
public class A{
private IFunctionA functionA = new FunctionA();
// same with b
public void a(int param1, int param2){
functionA.a(param1, param2);
}
//same with function b
}
答案 3 :(得分:0)
如果A类和B类的方法在行为上相似,则可以通过参数类替换参数。这将定义两个get方法(param1和param2),你需要两个构造函数,一个是A类使用的参数,B类只有一个参数(实际上有几个解决方案可以得到相同的结果)。
这样两个类都可以实现相同的接口:
public interface ABInterface {
void a(AParams params);
void b(BParams params);
...
}
public class AParams implements ABInterface {
private int param1;
private int param2;
public AParams(int param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
public AParams(int param1) {
this.param1 = param1;
}
public int getParam1() {
return param1;
}
public int getParam2() {
return param2;
}
}
public class BParams implements ABInterface {
private String param1;
private int param2;
public BParams(String param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
public BParams(String param1) {
this.param1 = param1;
}
public String getParam1() {
return param1;
}
public int getParam2() {
return param2;
}
}
public class A{
public void a(AParams params) {
...
}
public void b(BParams params) {
...
}
...
}
public class B{
public void a(AParams params){
...
}
public void b(BParams params){
...
}
...
}
public void someMethod() {
// you can new invoke these methods like this
a.a(new AParams(1,2));
b.a(new AParams(1));
// but also like this, to reuse existing code
AParams params = new AParams(1,2);
a.a(params);
b.a(params);
}