我有两节课 A级: 包含4个不同数据类型的成员变量和3个方法(m1(),m2()和m3())
例如:
class ClassA
{
String a;
String b;
Double c;
UserDefinedTypeA d;
public m1(){
//All the 4 variables are used here.
}
public m2(){
//All the variables are used here.
}
public m3(){
//All the variables are used here.
}
ClassB: 有4个成员变量和3个方法(m1(),m2()和m3())。 其中三个成员变量与ClassA相同,只有第四个变量类型不同。
例如:
class ClassB
{
String a;
String b;
Double c;
UserDefinedTypeB d;
public m1(){
//All the 4 variables are used here.
}
public m2(){
//All the variables are used here.
}
public m3(){
//All the variables are used here.
}
现在我想避免在子类中覆盖m1,m2和m3,因为类型的第4个成员变量是不同的。 作为一个解决方案,我计划在超类中创建另一个成员变量,其类型为:UserDefinedTypeB,并从子类构造函数初始化此变量。检查UserDefinedTypeB是否为null的所有方法。如果它不为null,则i将执行子类特定逻辑,否则将继续使用支持UserDefinedTypeB的超类逻辑。
但是觉得这会降低性能。关于提出更好方法的任何建议。
答案 0 :(得分:1)
更好的方法是引入超类SuperClass并为m1(),m2()和m3()移动3个公共变量和逻辑。
"execution": {
//"PowerShell3": {
// "target": "Hello.ps1",
// "argumentFormat": ""
//}
"Process": {
"target": "..\\ConsoleApplication1.exe",
"argumentFormat": "$(ConnectedServiceName) $(currentDirectory) $(ApiPortalName)"
}
}
答案 1 :(得分:0)
你可以考虑使用泛型:
public abstract class SuperClass<T> {
String a;
String b;
Double c;
T d;
public void m1(){
//All the 4 variables are used here.
m1logic();
}
public void m2(){
//All the variables are used here.
m2logic();
}
public void m3(){
//All the variables are used here.
m3logic();
}
public abstract void m1logic();
public abstract void m2logic();
public abstract void m3logic();
}
public class ClassA extends SuperClass<UserDefinedTypeA> {
public void m1logic(){
// UserDefinedTypeA logic
}
public void m2logic(){
// UserDefinedTypeA logic
}
public void m3logic(){
// UserDefinedTypeA logic
}
}
public class ClassB extends SuperClass<UserDefinedTypeB> {
public void m1logic(){
// UserDefinedTypeB logic
}
public void m2logic(){
// UserDefinedTypeB logic
}
public void m3logic(){
// UserDefinedTypeB logic
}
}
我也会使用double
而不是Double
,除非你有其他正当理由。