Java中方法的重载与重写的区别
2015-04-19 11:35
686 查看
重载(overloading)
遵循“两同一不同”规则
1)、同一个类中可以有多个名称相同的方法(“两同”),但这些方法的参数列表各不相同((“一不同”)即参数个数或类型不同)。
2)、返回值类型、修饰符可以相同也可以不同,但Java里不能使用方法的返回值类型、修饰符作为区分方法重载的依据。
3)、构造方法可以重载不可以重写。构造方法重载可以用来满足在调用方法时候(实例化对象时)不同的返回值和参数的要求。
4)、重载是一个类中多态性的一种表现。
5)、同一个类中。
例:
重写(overriding 又称覆盖)
遵循“ 两同两小一大”规则
1)、子类中的方法可以与父类中的某个方法的名称和参数完全相同(“两同”),通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了(如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类),这也是面向对象编程的父类与子类之间多态性的一种表现。
2)、子类方法返回值类型应比父类方法返回值类型更小或相等,子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子义常,因为子类可以解决父类的一些问题,不能比父类有更多的问题(“两小”)。
3)、子类方法的访问权限只能比父类的更大,不能更小(“一大”)。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
4)、类与类之间。
例:
遵循“两同一不同”规则
1)、同一个类中可以有多个名称相同的方法(“两同”),但这些方法的参数列表各不相同((“一不同”)即参数个数或类型不同)。
2)、返回值类型、修饰符可以相同也可以不同,但Java里不能使用方法的返回值类型、修饰符作为区分方法重载的依据。
3)、构造方法可以重载不可以重写。构造方法重载可以用来满足在调用方法时候(实例化对象时)不同的返回值和参数的要求。
4)、重载是一个类中多态性的一种表现。
5)、同一个类中。
例:
public class OverLoad{ private String name; private int sex; //无参构造方法 public OverLoad(){ super(); } //构造方法的重载 public OverLoad(String name,int sex){ super(); this.name=name; this.sex=sex; } //输出构造方法中的参数值 public void print(){ System.out.println("name="+name+" sex="+sex); } public void test(){ System.out.println("无参数的方法!"); } //重载test方法 public void test(String m){ System.out.println("重载test的方法:" + m); } public static void main(String[] args){ OverLoad ol=new OverLoad("张三",20); ol.print(); //一个类中多态性的一种表现 //调用上面没有参数的test方法 ol.test(); //调用上面有一个字符串参数的test方法 ol.test("Hello"); } }
重写(overriding 又称覆盖)
遵循“ 两同两小一大”规则
1)、子类中的方法可以与父类中的某个方法的名称和参数完全相同(“两同”),通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了(如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类),这也是面向对象编程的父类与子类之间多态性的一种表现。
2)、子类方法返回值类型应比父类方法返回值类型更小或相等,子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子义常,因为子类可以解决父类的一些问题,不能比父类有更多的问题(“两小”)。
3)、子类方法的访问权限只能比父类的更大,不能更小(“一大”)。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
4)、类与类之间。
例:
public class Car{ //定义Car类的run方法 public void run(){ System.out.println("我的奔驰正在跑..."); } } //再定义一个Test类,这个类扩展了Car类,重写了Car类的run方法。 public class Test extends Car{ //重写Car类的run方法 public void run(){ System.out.println("我的法拉利正在跑..."); //调用父类的run方法 //super.run() } public static void main(String[] args){ //创建Test对象 Test t=new Test(); t.run(); } }
相关文章推荐
- java学习中重写与重载方法的区别(转自:小鸟的天空)
- java学习中重写与重载方法的区别(转自:小鸟的天空)
- Java中方法重载和方法重写区别
- java中方法的重载与重写的区别
- java中方法的重载与重写的区别
- java中方法的重载与重写的区别
- java语言中方法重载overloading和方法重写(覆写)overriding的区别
- java中方法的重载与重写的区别
- java中方法的重载与重写的区别
- JAVA方法重载与重写的区别
- java重载方法和重写方法之间的区别
- java———方法的重载与重写的区别
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- Java中方法重载和方法重写的区别
- Java中的方法重载(method overloading)和方法重写(method Overriding)的区别
- java中方法的重写(overriding)与重载(overloading)的区别
- Java中方法重载和方法重写的区别
- Java 方法重写与重载的区别
- java重载与重写的区别+重写父类equals方法的完美实现
- Java方法重载和方法重写的区别介绍