重载(Overload)与重写(Override)的区别

本文详细介绍了Java中的方法重写(Override)和重载(Overload)概念。重写发生在子类对父类非私有方法的继承过程中,遵循两同两小一大原则,用于满足子类特定需求。重载则是在同一类中,通过方法名相同但参数列表不同的方式实现。同时,文章指出构造方法和私有方法不能被重写,并强调了重写与重载的主要区别。
摘要由CSDN通过智能技术生成

什么是重写(Override)?

重写:子类继承父类,子类声明与父类方法方法名相同,参数列表相同的称为重写。
重写规则:遵从两同两小一大原则;
两同:方法名相同,参数列表相同
两小:返回值类型小于等于父类。(1)当父类返回值类型为基本数据类型或void 时,子类返回值类型必须与父类相同。(2)当父类返回值类型为引用类型时,子类返回值类型必须小于 或为父类的返回值类型的子类。
一大:子类访问权限必须大于等于父类。

为什么要进行重写?

答:子类继承父类的非私有方法时,父类方法不满足子类的需求,此时子类可以重写该方法满足自己需求。

package JAVA_OOP.com.huacit.day02Inheritance;

/**
 * @author yyc
 * 方法的重写Override 或 Overwrite
 * 1.子类可以是使用父类中所有非私有资源,也可以扩展子类自己的属性和功能,如果子类继承过来的方法不满足子类的需求,可以进行重写。
 * 子类继承父类之后,父类中的方法功能不满足子类需求时可以对其进行重写
 * 2.重写规则:遵循两同两小一大原则:
 * ① 两同: 方法名相同,参数列表相同
 * ②两小 : 返回值类型 小于等于父类。 第一:若父类方法返回值类型为void 或 8 种基本类型,则必须相同。
 * 如果父类返回值类型是引用类型 ,则子类返回值类型可以与父类相同 或 是父类返回值类型的子类。
 * 第二: 子类抛出的异常必须小于父类(如果父类没有抛出异常,则子类不能抛出异常,只能使用try- catch捕获异常。)
 * ③一大: 子类访问权限必须大于等于父类。若父类访问权限为public ,则子类与之相同。
 * 3.为什么要记性重写?
 * 父类提供的方法不能满足子类的使用需求,但是由于子类间存在差异性,不能直接对父类的代码进行修改,
 * 这时候就只能在子类中进行重写,避免修改源代码,也不会对原有功能产生影响,能够提高程序的扩展性。
 *
 * 构造方法能不能被重写:
 * 不能:
 * 私有方法能不能被重写?
 * 不能:
 *  重写(Override) 和 重载(Overload)的区别?
 */
public class Test4_Override {
    public static void main(String[] args){
        Chinese c1 = new Chinese();
        //重写前调用父类的方法,重写后调用子类的方法。
        c1.eat();
        c1.show();
    }
}
class Person{
    public void eat(){
        System.out.println("eat----------");
    }
    public Person show(){
        System.out.println("父类show()");
        return this;
    }
    private void print(){
        System.out.println("打印---");
    }
}
class Chinese extends Person{
    @Override   //@Override 注解,表示当前方法为重写方法。
    public void eat(){
        System.out.println("吃啥!");
    }
    @Override
    public Chinese show(){
        System.out.println("子类show()");
        return this;
    }
    //@Override,不识别为重写,加上Override认为在访问父类中的私有方法。编译报错。父类的私有属性可继承不可访问。
    /*
    * 对于父类中的私有方法,子类不能重写,如果子类中定义了相同的方法,则会识别为子类特有的方法。
    * */
    public void print(){
        System.out.println("打印机打印");
    }
}

什么是重载(Overload)?

(1)同一个类下,方法名相同,参数列表不同的方法称之为方法的重载。

参数列表不同是指参数个数,参数顺序,参数类型不同,重载与返回值类型,访问权限,形参变量名和 方法体均无关。( 建议把返回值类型设置相同 避免麻烦 )

区别

重载前提是必须在同一个类中,方法名相同,参数列表不同。
重写 前提 发生继承关系,子类对父类非私有方法的重写。

注意:
a. 子类可以继承父类的私有方法,但是不能访问父类的私有方法,子类可以定义与父类私有方法完全相同的方法,但是不能使用呢@Override修饰,因为使用该注解表示访问了父类的该方法,而私有方法子类是没有访问权限的。
b. 构造方法不能被继承,所以不能被重写。构造方法是一个类特有的。方法名与类名相同,没有返回值类型,子类中定义则语法不符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值