首页

文章

请描述java重载和重写的区别

发布网友 发布时间:2022-03-22 23:44

我来回答

3个回答

热心网友 时间:2022-03-23 01:13

首先我们来讲讲:重载(Overloading)

    (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。
重载Overloading是一个类中多态性的一种表现。

    (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

    (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

    下面是重载的例子:
    package c04.answer;//这是包名
    //这是这个程序的第一种编程方法,在main方法中先创建一个Dog类实例,然后在Dog类的构造方法中利用this关键字调用不同的bark方法。
不同的重载方法bark是根据其参数类型的不同而区分的。
    //注意:除构造器以外,编译器禁止在其他任何地方中调用构造器。
    package c04.answer;
    public class Dog {
         Dog()
         {
                this.bark();
         }
         void bark()//bark()方法是重载方法
         {
                System.out.println(\"no barking!\");
                this.bark(\"female\", 3.4);
         }
         void bark(String m,double l)//注意:重载的方法的返回值都是一样的,
         {
                System.out.println(\"a barking dog!\");
                this.bark(5, \"China\");
         }
         void bark(int a,String n)//不能以返回值区分重载方法,而只能以“参数类型”和“类名”来区分
         {
                System.out.println(\"a howling dog\");
         }
         public static void main(String[] args)
         {
                Dog dog = new Dog();
                //dog.bark(); [Page]
                //dog.bark(\"male\", \"yellow\");
                //dog.bark(5, \"China\");
 

  然后我们再来谈谈 重写(Overriding)

    (1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。
但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。
方法重写又称方法覆盖。

    (2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。
如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

    (3)子类函数的访问修饰权限不能少于父类的;
    下面是重写的例子:

    概念:即调用对象方法的机制。
 
    动态绑定的内幕:
    1、编译器检查对象声明的类型和方法名,从而获取所有候选方法。试着把上例Base类的test注释掉,这时再编译就无法通过。
 
    2、重载决策:编译器检查方法调用的参数类型,从上述候选方法选出唯一的那一个(其间会有隐含类型转化)。
如果编译器找到多于一个或者没找到,此时编译器就会报错。试着把上例Base类的test(byte b)注释掉,这时运行结果是1 1。
 
    3、若方法类型为priavte static final ,java采用静态编译,编译器会准确知道该调用哪
    个方法。
 
    4、当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用对象的实际类型相匹配的方法版本。
在例子中,b所指向的实际类型是TestOverriding,所以b.test(0)调用子类的test。
但是,子类并没有重写test(byte b),所以b.test((byte)0)调用的是父类的test(byte b)。
如果把父类的(byte b)注释掉,则通过第二步隐含类型转化为int,最终调用的是子类的test(int i)。
 
学习总结:
    多态性是面向对象编程的一种特性,和方法无关,
    简单说,就是同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的
    重载——有不同的参数列表(静态多态性)
  而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法,
    即在子类中重写该方法——相同参数,不同实现(动态多态性)
 
    OOP三大特性:继承,多态,封装。
    public class Base
    {
        void test(int i)
        {
            System.out.print(i);
        }
        void test(byte b)
        {
            System.out.print(b);
        }
    }
    public class TestOverriding extends Base
    {
        void test(int i)
        {
            i++;
            System.out.println(i);
        }
          public static void main(String[]agrs)
        {
            Base b=new TestOverriding();
            b.test(0)
            b.test((byte)0)
        }
    }

    这时的输出结果是1     0,这是运行时动态绑定的结果。
 
重写的主要优点是能够定义某个子类特有的特征:
public class Father{
   public void speak(){
       System.out.println(Father);
    }
}
public class Son extends Father{
    public void speak(){
        System.out.println("son");
   }
}
这也叫做多态性,重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。
当上例中Father类speak()方法被private时,Son类不能重写出Father类speak()方法,此时Son类speak()方法相当与在Son类中定义的一个speak()方法。
Father类speak()方法一但被final时,无论该方法被public,protected及默认所修饰时,Son类根本不能重写Father类speak()方法,
试图编译代码时,编译器会报错。例:
public class Father{
   final public void speak(){
       System.out.println("Father");
    }
}
public class Son extends Father{
    public void speak(){
       System.out.println("son");
    }
}       //编译器会报错;
 
Father类speak()方法被默认修饰时,只能在同一包中,被其子类被重写,如果不在同一包则不能重写。
Father类speak()方法被protoeted时,不仅在同一包中,被其子类被重写,还可以不同包的子类重写。
 
重写方法的规则:
1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
3、访问修饰符的*一定要大于被重写方法的访问修饰符(public>protected>default>private)
4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
 
而重载的规则:
1、必须具有不同的参数列表;
2、可以有不责骂的返回类型,只要参数列表不同就可以了;
3、可以有不同的访问修饰符;
4、可以抛出不同的异常;
 
重写与重载的区别在于:
重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。
用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.

热心网友 时间:2022-03-23 02:31

//通俗点说吧:

//重载你可以把方法理解成,双胞胎,或者多胞胎,看似一样,功能缺不一样,
//区别就是参数列表不同!
    
//重写,你可以理解成,新方法,覆盖老方法,要求外观一模一样
//即:(参数列表,和返回值,权限修饰符必须大于等于父类)
//函数功能可以自定义;

热心网友 时间:2022-03-23 04:06

首先说一下它们俩的定义:

重载(Overloading)

重载发生在本类,方法名相同,参数列表不同,与返回值无关,只和方法名,参数列表,参数的类型有关.

重载(Overload):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不同。

(1):方法名必须相同

(2):方法的参数列表一定不一样。

(3):访问修饰符和返回值类型可以相同也可以不同。

其实简单而言:重载就是对于不同的情况写不同的方法。 比如,同一个类中,写不同的构造函数用于初始化不同的参数。

重写(Overriding)

重写发生在父类子类之间,比如所有类都是继承与Object类的,Object类中本身就有equals,hashcode,toString方法等.在任意子类中定义了重名和同样的参数列表就构成方法重写.

重写(override):一般都是表示子类和父类之间的关系,其主要的特征是:方法名相同,参数相同,但是具体的实现不同。

重写的特征:

(1):方法名必须相同,返回值类型必须相同

(2):参数列表必须相同

(3):访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。

(4):子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。

(5):构造方法不能被重写,

简单而言:就是具体的实现类对于父类的该方法实现不满意,需要自己在写一个满足于自己要求的方法。

它们的区别:

ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 食品生产许可证编号开头为“ G”。 C++重写和重载的区别 重载和重写有什么区别 方法的重写与重载的区别 函数重载和重写的区别 java 重载和重写的区别 重载跟重写有什么区别? 重载与重写的区别 简述方法重载和方法重写的区别 java中重载和重写的区别是什么? 方法重载和重写的区别 重载 和 重写 的区别 重载和重写有什么区别?有什么相似之处? 重写和重载的区别 重载和重写有什么区别? 请简述重载和重写的区别 重载和重写的区别 退出腾讯视频里的青少年年守护模式不知道密码怎么办? 腾讯视频的青少年模式怎么关 腾讯视频青少年模式忘记密码了怎么办 腾讯视频怎么关闭青少年模式在哪里输入密码,怎样退出? 没有话费的时候流量可以用吗? 话费没了还能用流量不? 充了流量但手机没话费,流量可以用吗? 中国电信没话费还可以用流量吗? 手机没话费了可以用流量吗? 如果手机没话费了那还能使用流量吗 欠费了流量可以正常使用吗? 手机没有话费 流量还能用吗 手机欠费了,还能上网我用流量吗? 联通的手机没话费了流量还能用吗 如果手机没话费了那还能使用流量吗? 手机没话费流量还能上网吗? 话费欠费了,但流量还有可以继续使用流量吗? 手机没话费也没有无线网,还可以用流量上网吗? 为什么手机停机没话费了还可以用流量? 手机没话费怎么还可以用数据流量, 手机话费没了,流量是不是暂时也用不了了? 办理了七天流量包但手机没话费能用流量吗? 为什么我的腾讯视频没有杜比视听?我已经开通腾讯视频VIP了! ipad怎么开腾讯杜比
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com