面向对象重写(override)与重载(overload)区别
2017-07-09 09:16
405 查看
一、重写(override)
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
3、重写的方法的返回值必须和被重写的方法的返回一致;
4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没s有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。
public class Shape { public static void main(String[] args){ Triangle tri = new Triangle(); System.out.println("Triangle is a type of shape? " + tri.isShape());// 继承 Shape shape = new Triangle(); System.out.println("My shape has " + shape.getSides() + " sides."); // 多态 Rectangle Rec = new Rectangle(); Shape shape2 = Rec; System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //重载 } public boolean isShape(){ return true; } public int getSides(){ return 0 ; } public int getSides(Triangle tri){ //重载 return 3 ; } public int getSides(Rectangle rec){ //重载 return 4 ; } } class Triangle extends Shape { public int getSides() { //重写,实现多态 return 3; } } class Rectangle extends Shape { public int getSides(int i) { //重载 return i; } }View Code
注意Triangle类的方法是重写,而Rectangle类的方法是重载。对两者比较,可以发现多态对重载的优点:
如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;
如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。
相关文章推荐
- 面向对象重写(override)与重载(overload)区别
- 面向对象重写(override)与重载(overload)区别
- 面向对象重写(override)与重载(overload)区别
- 面向对象重写(override)与重载(overload)区别
- 面向对象重写(override)与重载(overload)区别
- 面向对象重写(override)与重载(overload)区别---转载“竹木人”
- 面向对象重写(override)与重载(overload)区别
- JavaSE入门学习16:Java面向对象之重写(Override)和重载(Overload)
- 面向对象中的重写(override)与重载(overload)
- C#中隐藏(new)、方法重写(override)、重载(overload)的区别
- 关于overload和override的区别 (重载和重写)
- Java 重写(即覆盖Override)与重载(Overload)与多态几个概念的区别分析
- override(重写)与overload(重载)的区别
- 今天学习了 override (重写 )和overload(重载)的区别
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- override和overload的区别(重写和重载的区别)(转载)
- 【经典】C#中隐藏(new)、方法重写(override)、重载(overload)的区别
- 重载(Overload)和重写(Override)的区别
- 重写Override和重载Overload的区别 以及注意项目
- Java中重载(overload)和重写(override)的区别