资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

Java中重载与重写的区别

Java 更新时间: 发布时间: 计算机考试归档 最新发布

Java中重载与重写的区别

重载

        重载也叫做编译时多态,指一个类中可以有多个方法具有相同的名字,但这些方法的参数不同(参数的类型和个数不同)。那么代码编译的时候,就会根据参数自动选择相对应的方法编译运行。

        如果方法名和参数都是一样的,只依靠方法返回值类型的不同,或者方法返回值的不同,编译器是无法区分该调用哪个方法的,所以不能只依靠方法返回值不同来实现方法的重载。

        如果一个方法的参数不同了,也就是已经满足了重载的条件了,这个时候,方法返回值就可以不同了。

        总而言之,方法的返回值不同不能实现重载,而已经满足重载条件的方法,其返回值可以不同。

        请参考下面代码进行理解:

//重载也是一种多态public class overload {    public static void main(String[] args) {        double a=10.1;        double b=10.1;        int c=10;        int d=20;        double e=5.0;        add(a,b);        add(c,d);        add(a,c);        add(c,a);        add(a,b,e);    }    public static void add(double a,double b){        double c=a+b;        System.out.println(c);    }    public static void add(int a,int b){        //返回值数据类型是void        int c=a+b;        System.out.println(c);    }    public static void add(double a,int b){        double c=a+b;        System.out.println(c);    }    public static void add(int a,double b){        double c=a+b;        System.out.println(c);    }    public static void add(double a,double b,double e){        double c=a+b+e;        System.out.println(c);    }}    //重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数不同;    //判断重载不是看返回值数据类型,先看参数,由于下面这个add方法参数跟前面有个方法的参数一样了,    //然后两个add()方法发返回值数据类型不同(一个是void,一个是int),编译器不知道用哪个来编译代码。所以可以说重载是根据参数的数据类型的不同来实现的,若方法返回值的数据类型不同则无法实现重载。//    public static int add(int a,int b){         //返回值数据类型是int//        int c=a+b;//        System.out.println(c);//        return c;//    }

重写

         重写也叫运行时多态,重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

        重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

(1)在类的继承中,总会使用到重写。

public class Demo {    public static void main(String [] args){        Student student = new Student();        student.display();        student.work();    }}class Person {    String name;    public void work(){        System.out.println("尽心尽力地工作");    }    public void display(){        System.out.println("这是一个Person类");    }}class Student extends Person {    public void display(){        System.out.println("这是一个Student类");    //重写    }}

        当子类需要父类的功能,而功能主体子类有自己持有内容时,可以重写父类中的方法,这样既沿袭了父类的功能,又定义了子类特有的内容。

        如同上面子类Student继承了父类,所有继承了父类的方法display(),但子类持有自己的内容,所以在从父类继承下来的diaplay()方法中重写了方法中的内容("这是一个Student类")。

(2)不仅在普通的类的继承中会使用到重写,在抽象类的继承中也会用到。

        如果一个类继承了抽象类,那么它必须实现抽象类的所有抽象方法,而实现其抽象方法就需要使用到重写方法。

public abstract class Teacher {    public abstract void work();}class MathTeacher extends Teacher{    public void work(){                    //重写work()方法        System.out.println("我正在上数学课");    }}class ChineseTeacher extends Teacher{    public void work(){                    //重写work()方法        System.out.println("我正在上语文课");    }}public class Demo {        public static void main(String[] args) {            MathTeacher mathteacher = new MathTeacher();            mathteacher.work();            ChineseTeacher chineseteacher = new ChineseTeacher();            chineseteacher.work();        }}

 (3)重写在接口中也会频繁使用。

eg.

class 类 implements 接口{

        重写接口中的方法

}

        在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。当一个类需要某些功能时,就实现具有这些功能的接口,在接口中定义的功能,就叫功能的声明;在类中重写的方法,实现了功能,就叫功能的具体实现。

public class Demo {    public static void main(String[] args) {        Phone phone = new Phone();        phone.Func();        Computer computer = new Computer();        computer.Func();    }}public interface Usb {          //接口定义时需要使用interf关键字    void Func();}class Phone implements Usb{         //类实现接口使用implements    @Override    public void Func() {            //类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要<重写>该抽象方法        System.out.println("通过usb接口,给手机充电");    }}class Computer implements Usb{      //类实现接口使用implements    @Override    public void Func() {            //类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法        System.out.println("通过usb接口,进行数据转移");    }}

以上列举了几个关于重写的运用,重写在其他方面也有许多运用,如在异常中的运用等。

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1097285.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【Java中重载与重写的区别】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2