我已经创建了一个断言......基本上,我不知道将要验证什么。
可以是文本(用户名)或数字(价格,可用产品数量等)。
我已经在同一个名字上创建了两个方法,无论参数的类型是什么,基于它将被调用..
这是重写概念的正确实现吗?
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);
}
}
}
答案 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