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;
    }

 

posted @ 2021-12-07 19:35  取名好烦呀  阅读(466)  评论(0编辑  收藏  举报