重载(overload)与重写(override)的区别
2017-05-09 11:54
465 查看
重写与重载的区别
前言:经常混淆重载与重写,在此,分析两者的区别,借以理解。重写 (override)
重写又叫覆盖,是子类对父类允许访问的方法的重新编写,返回值和形参都不能变,即外壳不变,核心重写!重写的好处在于,子类可以根据自己的需要,覆盖父类的行为,重新定义属于自己的行为。在子类中调用父类被重写的方法时,要用super关键字。
例子:
public class Animal { public void move() { System.out.println("动物可以移动"); } } public class Dog extends Animal { @Override public void move() { System.out.println("狗可以奔跑"); } } public class Test { public static void main(String[] args) { Animal animal = new Animal(); Animal dog = new Dog(); animal.move(); dog.move(); } }
运行结果:
**动物可以移动
狗可以奔跑**
方法重写的规则:
参数列表必须和被重写方法相同
返回值必须和被重写方法相同
访问权限要>=被重写方法访问权限
抛出的异常不能比被重写方法抛出的异常更广泛
final方法不能被重写
static方法不能被重写,但可以再次声明
构造方法不能被重写
父类成员方法只能被子类重写
父类和子类在同一个包中,子类可以重写父类所有方法,除了声明为private和final的方法
父类和子类不在同一个包中,子类只能重写声明为public和protected的非final方法
重载(overload)
重载顾名思义:重新加载。重载存在于一个类中,方法名相同,参数列表不能相同,返回值可相同也可不同。
每个被重载的方法都必须有一个独一无二的参数列表(参数个数或参数顺序不同)。
重载规则:
被重载的方法必须有独一无二的参数列表
被重载的方法可以改变访问修饰符
被重载的方法可以改变返回值
被重载的方法可以声明更广泛的异常
构造函数可以被重载
不能以返回值类型作为重载方法的区分
public class Test { public void test() { System.out.println("test1"); } public void test(int n) { System.out.println("test2"); } public void test(String str, double d) { System.out.println("test3"); } public void test(double d, String str) { System.out.println("test4"); } /*编译错误,无法以返回值作为重载方法的区分 public int test(double d,String str){ System.out.println("参数列表相同,返回值不同"); return 1; } */ }
总结:
重载和重写是Java多态性的表现:重载是一个类中多态性的表现;重写是子类和父类中多态性的表现。相关文章推荐
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- Java中重载(overload)和重写(override)的区别
- 今天学习了 override (重写 )和overload(重载)的区别
- Java 重写(即覆盖Override)与重载(Overload)与多态几个概念的区别分析
- JAVA:重载overload与覆盖(重写)override的区别
- override和overload的区别(重写和重载的区别)(转载)
- override和overload的区别(重写和重载的区别)转载
- 重载(Overload)和重写(Override)的区别
- override(重写)与overload(重载)的区别
- 隐藏(new)和方法重写(override)和重载(overload)的区别
- 重载(overload)与重写(override)的区别 - JAVA课堂笔记整理
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- 面向对象重写(override)与重载(overload)区别---转载“竹木人”
- 重写Override和重载Overload的区别 以及注意项目
- 面向对象重写(override)与重载(overload)区别
- 重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别
- java中的Overload(重载)和Override(重写)的区别(二)
- C#中隐藏(new)、方法重写(override)、重载(overload)的区别
- 【C++基础】重载overload、重写(覆盖)override、隐藏hide的区别
- 【经典】C#中隐藏(new)、方法重写(override)、重载(overload)的区别