JAVA 重载(overload)和重写(override)区别
重载
在同一类中有两个及以上的方法名相同,但形参列表不同,则为重载(overload),
重载只要求方法名相同,参数列表不一样,即参数类型,顺序,数量任意一个不一样
而方法的修饰符以及返回值不一样,不能称之为重载,java不允许两个方法仅仅只有修饰符或者返回值不一样,这被认为是同一个方法而编译报错。
重写
重写(override)是指子类存在一个与父类同名的方法,被称为子类重写了父类的方法,
重写遵循两同两小一大原则:
两同指方法名相同,参数列表相同;
两小指子类方法返回值小于或等于父类方法返回值,子类方法声明抛出的异常小于或等于父类抛出的异常(A是B子类,则A小于B)
一大指子类方法的访问权限大于或等于父类方法的访问权限(访问权限从小到大为:private,protected,public)
因此可以看到重载和重写的相同点是都要求方法名相同,但最大的不同点是重载要求方法参数列表不同,但重写要求方法参数列表完全一致。
因此对于Object类中的equals方法,子类在重写其方法时,要求入参必须是Object,但子类又要根据其具体类型,在equals方法中做类型转换.
Oject类:
public boolean equals(Object obj) { return (this == obj); }
String类:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }