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

标签 java overriding

我有两个类 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/

相关文章:

c# - Java 保存和恢复框架位置、大小和状态

java - Motif Borders.Button边框的默认方法未知参数的覆盖方法

ruby - 是否可以在类或模块之外重写内置 Ruby 方法?

html - 样式表中的类覆盖 CDN

java - 在 Java 中验证 XML NCName

java - 来自现有 JSON 的 Springfox Swagger Ui

java - 错误地将 token 传递给字符串数组

java - ClassNotFoundException 在命令行上独立运行 Liquibase

c# - "x"按钮如何工作以及如何覆盖它?

java - 在使用泛型(Java)的扩展接口(interface)中覆盖方法契约?