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

    千次阅读 2018-03-20 09:35:30
    (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数不同的定义。调用方法时通过传递给它们的不同参数个数参数类型来决定具体使用哪个方法, 这就是多态性。(3) 重载的...

    一、重载

    (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、可以抛出不同的异常;
     

    重写与重载的区别在于:

    重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。
    用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.
    展开全文
  • 方法重载还是比较好理解的,就是在类的内部,定义多个方法,这些方法方法名字相同,参数类型参数个数不同,注意,返回值类型并不能区分重载;看代码: public void show(int a,double b){ } public void ...

    方法重载还是比较好理解的,就是在类的内部,定义多个方法,这些方法的方法名字相同,参数类型和参数个数不同,注意,返回值类型并不能区分重载;看代码:

    public void show(int a,double b){
    
    }
     public void show(double c){
     }
     
     public int show(double d){return  1;}   //报错,方法已经定义了
    

    在看方法重写(override)
    方法重写和方法覆盖都是一个道理,发生在子类继承父类或者实现接口的类,
    要求的是
    1.方法名字相同,
    2.参数个数不同,
    3.返回值类型不同 ,
    代码:
    在这里插入图片描述
    在这里插入图片描述
    方法重构:
    定义:在不改变外界外界访问的情况下对代码进行修改,但是不改变原方法的效果,提高其性能,使程序更加易读,可维护。
    重构是在不改变软件可观察行为的前提下改善其内部结构
    重构通常不是一次性的,它贯穿软件的整个生命周期,只要觉得不合理都是重构的时机。

    举个例子就好理解了:
    在接手一个遗留项目的时候,我们往往会遇到以下情况
    某甲:代码看了半天还是看不懂啊,尼玛,一个方法上千行,心累ing
    若干天后,终于看懂代码了,但是发现IDE一堆警告,一看提示说存在重复的代码,整个项目都是警告,那么多重复代码,不会封装一下吗,靠
    试着优化下代码,改着改着发现好多if-else,还是多层嵌套,每个嵌套的判断还TM很复杂,想想还是先不改了,万一改出问题,老子要吃P的(线上故障)
    以上情景想必大家一定很熟悉,心底肯定在嘀咕:这么烂的代码哪个孙子写的,不该了,老子重新写一套。。。

    展开全文
  • 小跑过来记录一下,免得下次难找。...可以通过重写或者重载等完成,但不限于此,更改注释、更改函数名类名等,都可以称之为重构。 – 它们的相同点在于方法名称都是一样的。 重写与重载的区别: 1.

    小跑过来记录一下,免得下次难找。也不知道有没有错误。

    名称定义所用场景
    重载在同一个类中允许同时存在多个同名方法,这些方法的参数个数或者类型不同同一个类类中的方法之间
    重写在子类中将父类的成员方法名保留(与父类同方法名,參数,返回值的成员方法),重新编写父类成员方法的实现内容父类与子类之间
    重构可以通过重写或者重载等完成,但不限于此,更改注释、更改函数名类名等,都可以称之为重构。

    它们的相同点在于方法名称都是一样的

    • 重写与重载的区别:

    1.重写必须继承,重载不用。
    2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。
    3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
    4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常。

    • 重构目的:

    通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性,系统发展到一定阶段后,使用重构的方式,不改变系统的外部功能,只对内部的结构进行重新的整理。

    参考大佬们的文章:

    展开全文
  • C#之重构重载

    千次阅读 热门讨论 2014-01-27 17:29:17
    1、先说重构,接着上一篇的例子,猫狗类继承父类动物,但是他们都有叫这个方法,除了叫的声音不一样之外,其余的都是一样的,这样造成了代码的重复,如果要修改这个方法得同时修改这两个子类,非常的麻烦。...

    1、先说重构,接着上一篇的例子,猫和狗类继承父类动物,但是他们都有叫这个方法,除了叫的声音不一样之外,其余的都是一样的,这样造成了代码的重复,如果要修改这个方法得同时修改这两个子类,非常的麻烦。这时候重构就起了很重要的作用。它将重复的代码提到父类,再加一个获得叫的方法就可以了。具体实现如下:

    class Animal
    {
    	//将共有代码提到父类
    	protected override void shout()
    	{
    		return  getShoutSound();
    	}
    	
    	//获得声音的方法
    	protected virtual string getShoutSound()
    	{
    		return "";
    	}
    }
    
    //类猫继承动物
    class Cat : Animal
    {
    	Protected override string getShoutSound()
    	{
    		return "喵"
    	}
    }
    //狗类继承动物
    class Dog:Animal
    {
    	Protected override string getShoutSound()
    	{
    		return "旺"
    	}
    }

    2、重载一般特征:方法名是相同的,但是参数类型或个数必须要有所不同。举个例子:

    class Dog
    {
    	private string name;
    	public Dog()
    	{
    		name="黑贝";
    	}
     
    	public Dog(string name)
    	{
    		this.name=name;
    	}
    }

        就像上面的关于对名字name的初始化就用到重载,如上面的构造函数Dog(),函数名相同,但是参数是不同的,一个有参数,一个没有参数。这就是方法重载。

    展开全文
  • JAVA中的重写、重构和重载的概念对于一个刚入门Java爱好者来说,很容易能混,下面就说一下我对着三个概念的理解。 1.重写,又称为覆盖,应用于父类子类之间,子类中的成员方法和父类中的成员方法同名,但方法的...
  • Java编程中对象的创建与使用以及方法重构重载的区别说明
  • 方法重载:一个方法的多种表现形式 方法重写:子孙类使用父类的方法,即为重写
  • 面向对象语言的特征之一多态,可分为静态多态动态多态,主要通过方法的重写和重载来实现; 1、静态多态:相同方法名根据传入参数不同实现不同的功能;通过方法重载实现; 2、动态多态:子类对父类中方法...
  • 在Java语言中,通过使用方法重载和重写实现类的多态性。 2.重写(覆盖)是指父子类之间的关系,当子类继承父类中所有可能被子类访问的成员方法时,如果子类的方法名与父类的方法名相同,那么子类就不能继承父类的...
  • Java中的重载、重写和重构的区别

    万次阅读 多人点赞 2018-12-11 19:03:44
    1、重载 重载(overloaded):重载就是在同一个类中允许同时存在一个...由于这些构造方法都需要根据类名进行命名,为了让方法名相同而形参不同的构造方法同时存在,必须用到“方法重载”,虽然方法重载起源于构造方...
  • 【C#】重构重载&重写

    热门讨论 2017-01-01 21:26:57
    重写和重载联系的是什么?重构重载的区别是什么?重写和重构又是什么关系?它们分别怎么用?重构是重新构什么?重写又是在重写什么?重载载的又是什么?哈哈,撒了吧,我是把自己给问傻啦,原本觉得学的还是可以的...
  • 重构 重构是对程序内部的架构的调整。 重构强调的是在不改变"软件外部可观察的行为"前提下,对内部结构进行调整,使得从程序的外部功能上看,没有任何变化。 如下例子: 重构前代码如下: #include <iostream>...
  • 重写、重载和重构

    千次阅读 热门讨论 2016-02-23 20:38:53
    重载、重写和重构在之前就学习过,但到现在仍然不能准确的说出它们到底有什么区别,该怎么具体的应用,看来真是书到用时方恨少,这种状况是不是特别严重?真的该总结回顾了。 重写(override): 什么是重写: ...
  • 文章目录1.方法的重载1.1 方法重载的概念1.2 方法重载的特点1.3 可变个数的形参方法名(参数类型 ......方法重载和 权限修饰符/返回值类型/参数名字/方法体内容 无关 //这个也是方法的重载 public void getDD
  • Java编程基础之重载和重构的区别

    千次阅读 2019-03-25 18:08:24
    1、重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型不做重载依据。直接上三份代码演示: public class OverLoadDemo1 { /** * 参数的数量不同 参数的类型不同 参数的顺序不同 */ // ...
  • 重构重载

    2013-09-16 19:33:45
    重载是指在同一个类中有若干同名而参数不同的方法,使用不同的参数可以调用同名方法的不同版本; 重构是指在子类中用与父类中相同的方法名、返回类型参数,重新构造父类的某一成员方法
  • 重构 重写 重载

    2017-06-06 10:36:27
    即只是父类的方法名相同,方法的签名并不相同;即不是同一个函数;重构就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式架构更趋合理,提高软件的扩展性维护性。...
  • 一、重载 ...重载虽然起源于构造方法,但是在普通方法中也可以使用方法重载方法重载就是在同一个类中允许同时存在多个同名方法,只要这些方法的参数类型、个数、顺序不同即可。 package com.jav...
  • 1.重载构造函数是一种...重载虽然起源于构造方法,但是在普通方法中也可以使用方法重载方法重载就是在同一个类中允许同时存在多个同名方法,只要这些方法的参数类型、个数、顺序不同即可。package com.java.t...
  • java中,重构重载、重写 1、什么叫重构? 答:重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式架构更趋合理,提高软件的扩展性维护性,系统发展到一定阶段后,使用重构的...
  •  最近的经历,被问到重构、重写、重载,今天在网上查资料学习。总结如下,希望对你有帮助。 重构、重写、重载 重构:通过调整程序代码改善软件的质量、性能,使其程序的设计模式架构更趋合理。提高软件的扩展...
  • 重写(覆盖)就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限,或是修改成员方法中的返回值类型。...重构,一种特殊的重写方式,子类与父类的成员方法返...
  • 重构、重写、重载 重构:通过调整程序代码改善软件的质量、性能,使其程序的设计模式架构更趋合理。提高软件的扩展性维护性。通俗点说,重构就是当你发现代码的不足之处时,去改动它的结构,去优化它。 重构的...
  • 方法重构

    千次阅读 2017-07-12 09:15:22
    方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。 原则如下: 1.方法名一定要相同。 2.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。 ...
  • 1.重载构造函数是一种特殊的函数,使用...重载虽然起源于构造方法,但是在普通方法中也可以使用方法重载方法重载就是在同一个类中允许同时存在多个同名方法,只要这些方法的参数类型、个数、顺序不同即可。pa...
  • 重构, 是对软计设计方法的描述, 这个层面是架构设计方法,例如有一个文档一开始叫做:names.txt,过几天你发现这个文档的名字怎么看怎么不顺眼,就是想改名字,这可以叫做是重构重构是一个软件维护的通用技巧, ...
  • 动态代理的功能:通过拦截器方法回调,对目标target方法进行增强。言外之意就是为了增强目标target方法。上面这句话没错,但也不要认为它就是真理,殊不知,动态代理还有投鞭断流的霸权,连目标target都不要的科幻...
  • MyBatis方法不支持重载--我有妙招

    千次阅读 多人点赞 2019-12-16 20:21:07
    使用JDK1.8 default关键字解决Mybatis方法不支持重载问题 配置: mybatis > 3.4.2 JDK > 1.8 问题 Mybatis中对接口方法重载没有提供优雅的支持,然而方法重载是对代码复用的一个重要手段。 场景 用户...
  • 【C#】重载重写重构

    千次阅读 热门讨论 2016-01-03 15:09:19
    C#重构重载重写
  • 在初入门Mybatis的时候可能都犯过一个错误,那就是在写Mapper接口的时候都重载过其中的方法,但是运行起来总是报错,那时候真的挺郁闷的,但是自己也查不出来原因,只能默默的改了方法名,哈哈,多么卑微的操作。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,751
精华内容 8,700
关键字:

方法重构和重载