>我有两个类 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.
}
B类 : 有 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的成员变量,并从子类构造函数初始化此变量。在所有方法中检查用户定义类型B是否为空。如果它不为 null,则 i 将执行特定于子类的逻辑,否则将继续使用 UserDefinedTypeB 的超类逻辑。
但觉得这会降低性能。任何关于提出更好方法的建议。
更好的方法是引入超类SuperClass,并为m1((,m2((和m3((移动3个公共变量和逻辑。
public abstract class SuperClass {
String a;
String b;
Double c;
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 d;
public void m1logic(){
// UserDefinedTypeA logic
}
public void m2logic(){
// UserDefinedTypeA logic
}
public void m3logic(){
// UserDefinedTypeA logic
}
}
public class ClassB extends SuperClass {
UserDefinedTypeB d;
public void m1logic(){
// UserDefinedTypeB logic
}
public void m2logic(){
// UserDefinedTypeB logic
}
public void m3logic(){
// UserDefinedTypeB logic
}
}
您可以考虑使用泛型:
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
,除非你有很好的理由。