override 是重写(覆盖)了一个方法,用来实现不同的功能,一般是用于子类继承父类时,重写父类的方法的时候。

重写(覆盖)的规则:
1.重写方法的参数列表必须表示与被重写的方法相同,否则不能称为重写而是重载。
2.重写方法的访问修饰符一定要大于或等于被重写方法的访问修饰符(public > protected > default > private)
3.重写的方法的返回值必须和被重写的方法的返回一致;
4.重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类; 
5.被重写的方法不能为private,否则只是在其子类中只是新定义了一个方法,并没有对其进行重写。 
6.静态方法不能被重写为非静态的方法(编译会出错)。
 
overload 是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
重载的规则:
1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
 
多态的概念比较复杂,有多种意义的多态,一个有趣但不严谨的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
一般,我们使用多态是为了避免在父类里大量重载引起代码臃肿且难于维护。
 
举个例子:
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;
}
}
 
注意Triangle类的方法是重写,而Rectangle类的方法是重载。对两者比较,可以发现多态对重载的优点:
如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;
如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。
 
 

Java override 和 overload 的区别的更多相关文章

  1. Java override 和 overload 的区别和联系

    方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现.重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多 ...

  2. JAVA Override和Overload的含义去区别

    java中的继承,方法覆盖(重写)override与方法的重载overload的区别 1.方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,重写(Overr ...

  3. override与overload的区别

    override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之 ...

  4. C#中override和overload的区别

    重载应该叫overload,重写叫override:重载某个方法是在同一个类中发生的!重写是在子类中重写父类中的方法. 1.override:   父类:public virtual string T ...

  5. override和overload的区别

    override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之 ...

  6. [C#] override和overload的区别

    重载应该叫overload,重写叫override:重载某个方法是在同一个类中发生的!重写是在子类中重写父类中的方法. 1.override:   父类:public virtual string T ...

  7. 由override 和 overload 引发的学习感悟

    工作已三年的我,竟然面试的时候去裸考了.想当然的认为有很多东西会在工作中不知不觉积累下来,现在想想,真是扯淡... 我的三年的工作经验是开发测试的工作,主要负责测试用例的自动化实现,稍深一些的是自动化 ...

  8. Java-Runoob-面向对象:Java Override/Overload

    ylbtech-Java-Runoob-面向对象:Java Override/Overload 1.返回顶部 1. Java 重写(Override)与重载(Overload) 重写(Override ...

  9. Override和Overload的含义去区别

    java中的继承,方法覆盖(重写)override与方法的重载overload的区别  方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现.   重写(Ove ...

随机推荐

  1. 一些不起眼但非常有用的 Vim 命令

    保存文件并退出 说起来有些惭愧,我也是最近才学到这个命令

  2. where和having子句的区别

    having子句可以让我们筛选成组后的各种数据,having子句在查询过程中慢于聚合语句 having的用法 having子句可以让我们筛选成组后的各种数据,having子句在查询过程中慢于聚合语句( ...

  3. nginx简易安装

    yum -y install perl-ExtUtils-Embed ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx ...

  4. Clover 资源管理器 http://cn.ejie.me/

    附件列表 clover.jpg

  5. Python 10 —— 杂

    Python 10 —— 杂 科学计算 NumPy:数组,数组函数,傅里叶变换 SciPy:依赖于NumPy,提供更多工具,比如绘图 绘图 Matplitlib:依赖于NumPy和Tkinter

  6. 大文件下载控件(down2)-示例更新-Xproer.HttpDownloader

    版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/down2/i ...

  7. eclipse左边导航package explorer自动定位

    eclipse或myeclipse中右边编辑界面点击 左边导航自动定位     左导航Package Explorer的右上角有一个黄色双向箭头图标,鼠标移动到上面提示"Link with ...

  8. jquery 获取 scrollHeight

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:匿名用户链接:http://www.zhihu.com/question/20985674/answer/16807177来源 ...

  9. rlwrap-0.37.tar.gz实现sqlplus上下翻页

    1.上传rlwrap-0.37.tar.gz到linux 2.解压rlwrap-0.37.tar.gz [root@node1 mnt]# tar zxvf rlwrap-0.37.tar.gz [r ...

  10. Linux下PHP安装oci8扩展

    PHP通常搭配Mysql使用,但有时候也会连接到Oracle数据库.安装PHP的oci8扩张之前,需要先安装Oracle Instant Client( basic 或 basic lite 版就行了 ...