重写是 子类重写父类中的同名方法, 参数个数 参数类型 和返回类型都一样。重载是在一个类中 参数个数 或者 参数类型不同多个重名方法。那请问重构是什么概念呢 什么时候用 怎么用 还有要注意的事项是什么呢?
(我只知道子类可以重构父类中的构造函数,通过 super.[构造函数(根据需要填写不同的参数(父类中要有))]。感觉用的不是很多面试可能碰到,希望好心人能说的详细点,谢谢了。)

解决方案 »

  1.   

    重构,如果你指的是Refactoring,那么他和重写和重载完全不是一组概念。重构是指在不改变已有代码逻辑的基础上,对代码的解构进行调整,增强代码的可读性、降低冗余、增加健壮性、可扩展能力等。重构基本上伴随着XP等心的软件开发思想出现的,源于对优质代码的不懈追求,
    通过重构主要是提升代码质量,而不是增加功能。重构最常见的动作包括:
    函数的拆分(大方法变小方法)
    重复代码的合并,
    方法的迁移(放到更合适的类中)。
    Eclipse对重构支持挺好的。
      

  2.   

    “我只知道子类可以重构父类中的构造函数”lz这句话貌似有问题,子类是重载父类的构造函数
    重构是改变代码结构,不改变功能,使代码更易维护,更易阅读,等等。。 
    lz如果是问构造函数的问题不。有一句话,生成子类对象时,一定会先生成父类对象。所以一定会调用父类的构造方法
      

  3.   

    支持sutku。所以说很多原生英文的东西,翻译到中文,还有那么多蹩脚的翻译,让人疑惑啊。
      

  4.   

    6.9. 方法的重载
    Overloading在一个类中可以定义多个同名方法,各个方法的参数表一定不同。但修饰词可能相同,返回值也可能相同。
    在程序的编译过程中根据变量类型来找相应的方法。Overloading被认为是编译时的多态。Overloading 只是为方便程序员编程的解决方法,编译之后的方法名实际加上了各参数类型成为唯一的名字。普通方法
    public void aa(int a,double b) throws IOException{}
    private int aa(double a,int b){}
    protected double aa(String a,String b){}
    构造方法也可以实现overloading。
    例:
    public  void  teach(){};
    public  void  teach(int a){};
    public  void  teach(String a){}为三种不同的方法。Overloading方法对于不匹配的参数是从低向高转换的。
    Byte—short—float—int—long—double。System.out.println(“%5.2f,%10.3f”, num,num2);  按格式输入7.3.1. 方法的覆盖(overridding)
    当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法,称为覆盖。(注意返回值类型也必须相同,否则编译出错。)
    如果方法参数表不同,则成重载。
    特点:
    1.对于方法的访问限制修饰词,子类方法要比父类的访问权限更高。
    父类为public,那么子类为private则出现错误。
    2.子类抛出的异常应该是父类抛出的异常或其子类
      

  5.   

    父类(SuperClass)和 子类(SubClass)的关系
    父类的非私有化属性(不同包的子类无法访问default修饰符)和方法可以默认继承到子类。
    Class Son extends Father{
    }
    而如果父类中的私有方法被子类调用的话,则编译报错。
    父类的构造方法子类不可以继承,更不存在覆盖的问题。
    所以子类构造方法默认调用父类的无参构造方法。(所以养成写无参构造的习惯)
    如果子类访问父类的有参构造方法,必须在子类构造方法第一行使用super(参数)
    当构造一个对象的时候,系统先构造父类对象,再构造子类对象。
    Public class BMWcar extends Car{
    Public BMWcar(){
    Super(int alength); //显式的调用父类的构造,默认调用无参构造
    //所以父类没有无参构造的话,子类如果不加显示调用其他构造就会报错。这里的super是一个对父类的引用
    }
    }