gpt4 book ai didi

java - 通过避免在特定场景中重写 java 父类(super class)方法来重新使用父类(super class)方法

转载 作者:行者123 更新时间:2023-12-02 11:41:10 27 4
gpt4 key购买 nike

我有两个类 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,因为第四个成员变量的类型不同。作为解决方案,我计划在父类(super class)中创建另一个类型为 UserDefinedTypeB 的成员变量,并从子类构造函数初始化该变量。检查所有方法中 UserDefinedTypeB 是否为 null 。如果它不为空,我将执行子类特定逻辑,否则将继续支持 UserDefinedTypeB 的父类(super class)逻辑。

但感觉这会降低性能。关于提出更好方法的任何建议。

最佳答案

更好的方法是在父类(super class)SuperClass中引入,并为m1()、m2()和m3()移动3个公共(public)变量和逻辑。

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
}
}

关于java - 通过避免在特定场景中重写 java 父类(super class)方法来重新使用父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48534958/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com