你能给出一个重写的例子吗?

时间:2014-11-21 10:26:20

标签: java

我已经创建了一个断言......基本上,我不知道将要验证什么。

可以是文本(用户名)或数字(价格,可用产品数量等)。

我已经在同一个名字上创建了两个方法,无论参数的类型是什么,基于它将被调用..

这是重写概念的正确实现吗?

public class U_Assertion {

    public void assertEquals(String actual, String expected) {
        // Compare Actual and Expected
        if (actual.equals(expected)) {
            System.out.println(actual + " Meets Expected " + expected);
        } else {
            System.out.println(actual + " did not Meet Expected " + expected);
        }
    }

    public void assertEquals(int actual, int expected) {
        // Compare Actual and Expected
        if (actual == expected) {
            System.out.println(actual + " Meets Expected " + expected);
        } else {
            System.out.println(actual + " did not Meet Expected " + expected);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

这不是overriding,而是overloading

是的,这是重载的正确实现。

它让人联想到System.out(一个PrintStream对象)的方法,它们具有不同的print&用于不同数据类型的println方法,但它们对值执行相同的操作。有关重载的另一个示例,请参阅constructors of Scanner,它不仅因为参数类型过载而使用不同的输入源,而且还会在参数数量上超载,以使charsetName参数可选。

(请注意,在您的情况下使用重载并不是绝对必要的 - 两个方法中的参数数量相同,因此您可以通过使用一个参数类型为{{1}的方法来获得相同的功能}:

Object

这适用于任意public void assertEquals(Object actual, Object expected) { // Compare Actual and Expected if (actual.equals(expected)) { System.out.println(actual + " Meets Expected " + expected); } else { System.out.println(actual + " did not Meet Expected " + expected); } } ,包括Object。它也适用于像String这样的原始类型,因为这些值将boxed转换为int个对象,但这会带来一些额外的性能成本。使用重载仍然很有用,因为它可以避免装箱开销。)

答案 1 :(得分:0)

覆盖概念是将父类的方法重新定义为子类:

public class ParentClass {
    public void method() {
        System.out.println("parent");
    }
}

public class ChildClass extends ParentClass{
    @Override
    public void method() {
        System.out.println("child");
    }
}

new ParentClass().method();
new ChildClass().method();

这将输出:

parent
child