java - 根据参数是子类型还是父类(super class)型来重载方法,这是丑陋的设计吗?

标签 java polymorphism overriding overloading

根据参数是子类型还是父类(super class)型来重载方法,这是丑陋的设计吗?

我打算实现一个父类(super class)A和一个子类B,并且对象可以相互比较。

compareTo在A类和B类中都被重载了两次,代码显得有点乱。 感觉设计很丑。我不确定是否有更优雅的方法。

class A implements Comparable<A> {
    private Integer x;

    public A(Integer i) {
        x = i;
    }

    public Integer getX() {
        return x;
    }

    public int compareTo(A other) {
        return x.compareTo(other.getX());
    }

    public int compareTo(B other) {
        return x.compareTo(other.getX() + other.getY());
    }
}

class B extends A {
    private Integer y;

    public B(Integer a, Integer b) {
        super(a);
        y = b;
    }

    public Integer getY() {
        return y;
    }

    @Override
    public int compareTo(A other) {
        return Integer.compare(this.getX() + y, other.getX());
    }

    @Override
    public int compareTo(B other) {
        return Integer.compare(this.getX() + y, other.getX() + other.getY());
    }
}

最佳答案

是的,这是一个糟糕的设计。像这样就更好了。

class A implements Comparable<A> {
    private Integer x;

    public A(Integer i) {
        x = i;
    }

    public Integer getX() {
        return getX();
    }

    protected Integer compareValue() {
        return getX();
    }

    @Override
    public int compareTo(A other) {
        return compareValue().compareTo(other.compareValue());
    }
}

class B extends A {
    Integer y;

    public B(Integer a, Integer b) {
        super(a);
        y = b;
    }

    public Integer getY() {
        return y;
    }

    @Override
    protected Integer compareValue() {
        return getX() + getY();
    }
}

关于java - 根据参数是子类型还是父类(super class)型来重载方法,这是丑陋的设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47717572/

相关文章:

java - Tomcat 服务器需要重新启动才能获取更新的 Neo4J 数据库

java - 试图理解Java中两个多态命令之间的区别

php - 重写Wordpress核心函数_wp_mysql_week()

java - 是否有等同于@Override 的用于覆盖(隐藏)静态方法的注解?

java - 缺少属性 'type',而映射的反序列化包含混合子类型 - 多态性

Scala : Why can't we do super. val?

java - 如何在 C++ 中获得 Java 的最终功能

java - 比较数组内的距离

java - 当我们说 Hashtable 或 Vector 是同步的时,这意味着什么?

haskell - 多态编码的递归代数数据类型的值是什么?