精华内容
下载资源
问答
  • JAVA重写和重载的区别

    万次阅读 多人点赞 2018-07-11 22:04:05
    问: Java 重载重写什么?有什么区别? 答:  重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回...

    问: Java 重载与重写是什么?有什么区别?

    答:
      重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。

    图1. Android类中的一个重载例子

    重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法,如需父类中原有的方法则可使用 super 关键字。

    图2. Android类中的常见的一个重写例子
    ----------

    **重载规则:**必须具有不同的参数列表; 可以有不同的返回类型;可以有不同的访问修饰符;可以抛出不同的异常。

    重写规则:参数列表必须完全与被重写的方法相同,否则不能称其为重写;返回类型必须一直与被重写的方法相同,否则不能称其为重写;访问修饰符的限制一定要大于等于被重写方法的访问修饰符;重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常,譬如父类方法声明了一个检查异常 IOException,在重写这个方法时就不能抛出 Exception,只能抛出 IOException 的子类异常,可以抛出非检查异常。

    重载与重写是 Java 多态性的不同表现。
      重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)
      而重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)。


    问:Java 构造方法能否被重写和重载?

    答:
      重写是子类方法重写父类的方法,重写的方法名不变,而类的构造方法名必须与类名一致,假设父类的构造方法如果能够被子类重写则子类类名必须与父类类名一致才行,所以 Java 的构造方法不能被重写的。而重载是针对同一个的,所以构造方法可以被重载

    问:下面程序的运行结果是什么,为什么?

    public class Demo {
        
    public boolean equals( Demo other) {
            System.out.println("use Demo equals." );
            return true;    
    }
        
    public static void main(String[] args) {    
        Object o1 =new Demo ();
        Object o2 =new Demo ();        
        Demo o3 =new Demo ();
        Demo o4 =new Demo ();
    
       if (o1.equals(o2)) {
                System.out.println("o1 is equal with o2.");
            }
    
       if(o3.equals(o4)) {             
                System.out.println("o3 is equal with o4.");
            }
        }
    }
    

    答:上面程序的运行结果如下。

    use Demo equals.
    o3 is equal with o4.
    

    因为 Demo 类中的 public boolean equals(Demo other) 方法并没有重写 Object 类中的 public boolean equals(Object obj) 方法,原因是其违背了参数规则,其中一个是 Demo 类型而另一个是 Object 类型,因此这两个方法是重载关系(发生在编译时)而不是重写关系;故当调用 o1.equals(o2) 时,o2 是 Object 类型参数,实际上调用了 Object 类中的 public boolean equals(Object obj) 方法,因为在编译时 o1 和 o2 都是 Object 类型,而Object 类的 equals 方法是通过比较内存地址才返回 false;当调用 o3.equals(o4) 时,实际上调用了 Demo 类中的 equals(Demo other) 方法,因为在编译时 o3 和 o4 都是 Demo 类型的,所以才有上面的打印。

    展开全文
  • Java重写和重载

    2017-08-09 19:26:47
    java重写和重载的比较。。

    在Java中,重载和重写是别叫让人混淆的部分,但其实也挺好区别的。


    重载 一个类中出现多个同名方法或者是同名构造函数,这就叫方法重载和构造重载

    注意这里的关键字是一个类

    重载的特点是:方法名字相同且参数列表不同。  与访问修饰符和返回值类型无关。

    举个例子:



    这就是方法的重载,那构造重载就是同时创建一个有参和一个无参的构造。


    下面我们来介绍一些重写-————发生在有父子继承关系时,子类重写父类的方法

    可以看出,重写是发生在两个类中的,和重载就能区分开,值得注意的是重写的方法名要保持和父类方法一样的方法名,返回类型。

    举个例子:





    这里给出一个区别的表格


    位置 方法名 参数表 返回值 访问修饰符
    方法重写 子类 相同 相同 相同 不能比父类更严格
    方法重载 同类 相同 不同 无关 无关

    注意:访问修饰符是可以改变的,但是重写后的访问修饰符使用范围必须比父类的大
    还有就是private修饰的方法是不能重写的。

    展开全文
  • java重写和重载

    千次阅读 2015-03-18 13:02:52
    方法的重载:在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一。  参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者...

    方法的重载:

    在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一。


    参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者类型不同,方法重载时返回值类型可以不同,但是仅仅是返回值类型不同的话不可以。


    java在调用方法的时候,如果精确匹配没有对应的方法,会自动转换匹配相应的方法,例如,如果没有int类型的参数,但是有一个double类型的参数的同名方法,在调用该方法时如果传入int类型的参数,则不会报错,而是把int自动转换成double类型匹配double类型参数的方法。但是,这种情况也只是在精确匹配无法匹配的情况下才会发生,如果存在int类型参数的此方法,传int类型参数时则不会调用double类型的。


    重载的价值在于它允许相关的方法用同一个名字来访问,没有什么规定要求重载的方法之间必须有关系,但是实际上如果真的是没有任何关系的方法就不应该用重载实现,而是应该用新的方法,否则的话就违背了重载的初衷。


    普通方法可以重载,构造方法也一样可以重载。不管是普通方法还是构造方法,里边传递的参数都是既可以是简单类型也可以是对象。简单类型直接传值,而对象传递的则是引用。


    重载遵循“编译期绑定”,即在编译时根据参数确定调用哪一个方法。


    方法的重写:

    在子类继承父类的时候,子类中与父类方法名和参数列表完全一样,但是其他地方有不同,这种方式叫做重写。重写只发生在继承的时候,如果一个类不能被继承,则也不能被重写。方法的重写也称为方法的覆盖。


    重写遵循两同两小一大的原则,即:方法名相同,参数列表相同;子类抛出的异常要小于或等于父类抛出的异常,并且不能抛出父类没有的异常,子类的返回值类型要小于或等于父类的返回值类型;子类的访问权限要大于或等于父类的访问权限。


    除开上述原则之外,还要知道的是被标识为final的方法不能被重写,不能被继承的方法不能被重写,例如private修饰的方法。


    被子类对象重写过的方法,在程序运行时,根据对象的类型不同(而不是引用类型的不同)来决定调用哪个版本的方法,等号之前的是引用类型,new之后的是对象类型。


    重写遵循“运行时绑定”,即在运行的时候根据引用指向的实际对象类型来决定调用的方法版本。


    展开全文
  • 面试官:Java重写和重载什么区别?

    万次阅读 多人点赞 2020-02-21 10:50:29
    老读者都知道了,七年前,我从美女很多的苏州...他当时扔了一个面试题把我砸懵了:“王二,Java重写(Override)和重载(Overload)有什么区别?” 那年我二十三岁,正值青春年华,大约就是周杰伦发布《八度空间...

    老读者都知道了,七年前,我从美女很多的苏州回到美女更多的洛阳(美化了),抱着一幅“从二线城市退居三线城市”的心态,投了不少简历,也“约谈”了不少面试官,但仅有两三个令我感到满意。其中有一位叫老马,至今还活在我的微信通讯录里。他当时扔了一个面试题把我砸懵了:“王二,Java 的重写(Override)和重载(Overload)有什么区别?

    那年我二十三岁,正值青春年华,大约就是周杰伦发布《八度空间》的年纪,自认为所有的面试题都能对答如流,结果没想到啊,被“刁难”了——原来洛阳这块互联网的荒漠也有技术专家啊。现在回想起来,脸上不自觉地泛起了羞愧的红晕:主要是自己当时太菜了。不管怎么说,七年时间过去了,我的技术功底已经非常扎实,有能力写篇文章剖析一下 Java 的重写和重载了,只要能给后来者一些参考,我就觉得做了天大的善事。

    好了,让我们来步入正题。先来看一段重写的代码吧。

    class LaoWang{
        public void write() {
            System.out.println("老王写了一本《基督山伯爵》");
        }
    }
    public class XiaoWang extends LaoWang {
        @Override
        public void write() {
            System.out.println("小王写了一本《茶花女》");
        }
    }
    

    重写的两个方法名相同,方法参数的个数也相同;不过一个方法在父类中,另外一个在子类中。就好像父类 LaoWang 有一个 write() 方法(无参),方法体是写一本《基督山伯爵》;子类 XiaoWang 重写了父类的 write() 方法(无参),但方法体是写一本《茶花女》。

    来写一段测试代码。

    public class OverridingTest {
        public static void main(String[] args) {
            LaoWang wang = new XiaoWang();
            wang.write();
        }
    }
    

    大家猜结果是什么?

    小王写了一本《茶花女》
    

    在上面的代码中,们声明了一个类型为 LaoWang 的变量 wang。在编译期间,编译器会检查 LaoWang 类是否包含了 write() 方法,发现 LaoWang 类有,于是编译通过。在运行期间,new 了一个 XiaoWang 对象,并将其赋值给 wang,此时 Java 虚拟机知道 wang 引用的是 XiaoWang 对象,所以调用的是子类 XiaoWang 中的 write() 方法而不是父类 LaoWang 中的 write() 方法,因此输出结果为“小王写了一本《茶花女》”。

    再来看一段重载的代码吧。

    class LaoWang{
        public void read() {
            System.out.println("老王读了一本《Web全栈开发进阶之路》");
        }
        
        public void read(String bookname) {
            System.out.println("老王读了一本《" + bookname + "》");
        }
    }
    

    重载的两个方法名相同,但方法参数的个数不同,另外也不涉及到继承,两个方法在同一个类中。就好像类 LaoWang 有两个方法,名字都是 read(),但一个有参数(书名),另外一个没有(只能读写死的一本书)。

    来写一段测试代码。

    public class OverloadingTest {
        public static void main(String[] args) {
            LaoWang wang = new LaoWang();
            wang.read();
            wang.read("金瓶梅");
        }
    }
    

    这结果就不用猜了。变量 wang 的类型为 LaoWang,wang.read() 调用的是无参的 read() 方法,因此先输出“老王读了一本《Web全栈开发进阶之路》”;wang.read("金瓶梅") 调用的是有参的 read(bookname) 方法,因此后输出“老王读了一本《金瓶梅》”。在编译期间,编译器就知道这两个 read() 方法时不同的,因为它们的方法签名(=方法名称+方法参数)不同。

    简单的来总结一下:

    1)编译器无法决定调用哪个重写的方法,因为只从变量的类型上是无法做出判断的,要在运行时才能决定;但编译器可以明确地知道该调用哪个重载的方法,因为引用类型是确定的,参数个数决定了该调用哪个方法。

    2)多态针对的是重写,而不是重载。

    哎,后悔啊,早年我要是能把这道面试题吃透的话,也不用被老马刁难了。吟一首诗感慨一下人生吧。

    青青园中葵,朝露待日晞。
    阳春布德泽,万物生光辉。
    常恐秋节至,焜黄华叶衰。
    百川东到海,何时复西归?
    少壮不努力,老大徒伤悲

    另外,我想要告诉大家的是,重写(Override)和重载(Overload)是 Java 中两个非常重要的概念,新手经常会被它们俩迷惑,因为它们俩的英文名字太像了,中文翻译也只差一个字。难,太难了。

    好了,我亲爱的读者朋友,以上就是本文的全部内容了。能看到这里的都是最优秀的程序员,二哥必须要伸出大拇指为你点个赞👍。原创不易,如果觉得有点用的话,请不要吝啬你手中点赞的权力,因为这将是我最强的写作动力。我们下篇文章见!

    展开全文
  • java 重写&重载

    2016-06-14 22:14:05
    java override overload 重写 重载
  • Java 重写和重载的详解

    千次阅读 多人点赞 2016-07-15 19:05:22
    一,重载 1.概念:对于同一个类,如果这个类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样,这时候局构成方法重载 2.示例: public class Test{ public void a( ){ }; ...
  • java重写和重载

    2017-09-26 17:22:56
    1.重写和重载 重写(Overriding):方法重写又称方法覆盖,重写前提是继承(发生在父类与子类之间),方法名称、参数类型、返回值类型全部相同。 比如人包括中国人,人都会说话,中国人会说汉语还会说英语,此时中国...
  • Java基础-重写和重载

    2019-04-03 14:13:16
    Java基础-重写和重载 Demo import java.util.Date; class People { public void say() { System.out.println("我是人"); } } public class Man extends People { /* * 重写父类People的say方法 * 重写...
  • 在《深入理解Java虚拟机》第8.3.2章节中有讲解,这涉及到重载重写Java虚拟机中是如何实现的。 public class StaticDispatch { static abstract class Human{ } static class Man extends Human { ...
  • 我们知道面向对象主要是封装、继承多态,重写和重载都有面向对象的多态性,而一字相同,区别大不同。重写是子类继承父类中方法,属于动态多态性。重载发生在同一个类中方法名相同参数个数或类型不同,且与返回值...
  • public void move() //将父类的函数进行重写 { System.out.println("dog move"); } //重载, 函数名相同,参数不同 public void move(int dogState) { switch(dogState) { case 0: System.out....
  • Java重写重载的区别

    万次阅读 多人点赞 2018-06-03 18:22:24
    所以边学习边总结是很重要的,今天想写一篇关于重写和重载的博客,为什么?因为面试会问啊,这是基础中比较重要的地方,但我百度了几篇博客之后发现写的都差强人意,各有缺点,但是!!访问量都特别高,所以我决定...
  • Java方法重写重载的区别

    万次阅读 多人点赞 2018-08-23 10:26:39
    Java方法重写重载 一、方法重写(0veriding) 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法变量。 子类可以定义新的特征,当子类需要修改父类...
  • Java重写和重载

    2012-04-13 00:25:07
    Java重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,下面详细介绍你要了解的区别。 Java的多态机制 即重写重写主要用于子类父类之间,在父类中定义了一个方法,同时在...
  • 什么java的函数重载什么java的函数重写,两者的区别是什么,有没有形象的比喻?
  • Java 重写重载之间的区别
  • 重写方法的规则:1)、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。2)、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。3)、访问修饰符的限制一定要大于被...
  • java 基础 重写和重载

    2013-09-29 21:49:19
    对于重载,只要参数类型,参数个数,参数顺序 至少有一个不同,就会构成方法重载。 而且对于重载方法的调用,一般是向上转型! public static void input(short s){ System.out.println(s+"s"); } // p
  • 【面试题】重载重写的区别 重载“两同一不同”:同一个类,同一个方法名,不同的参数列表。注:方法的重载与方法的返回值无关! 构造器也是可以重载重写:(前提:在继承的基础之上,子类获取父类的结构以后...
  • Java中的重写和重载

    2016-10-18 17:53:42
    1. Java中的重载就是在一个类中可以创建多个方法,他们具有相同的名字,但是有不同个数的参数或是不同类型的参数,在使用时候根据不同的参数类型参数个数来确定使用哪一个函数,这就是多态性。 2. 重载的时候,...
  • Java重写和重载的区别 1.方法重写(Override) 方法的重写主要体现在Java的继承体系中,子类出现了父类一模一样的方法,方法重写也称为方法覆盖、方法复写。 方法重写的特点: 子类与父类的方法名返回类型相同...
  • Java 重写(Override)与重载(Overload) 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值形参都不能改变。即外壳不变,核心重写重写的好处在于子类可以根据需要,定义特定于自己...
  • JAVA重写重载的区别

    千次阅读 2011-08-14 22:27:43
    Java重写和重载机制 Java重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同。   重载 每个类型成员都有一个唯一的签名。方法签名由方法名称一个参数列表(方法的参数的顺序...
  • java重写重载的返回值

    千次阅读 2019-01-19 08:19:34
    1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。 2、返回的类型必须一直与被重写的方法的返回类型相同或其子类,否则不能称其为重写而是重载。 3、访问修饰符的限制一定要大于被重写方法的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,075
精华内容 40,830
关键字:

java重写和重载的联系是什么

java 订阅