多态_重载_覆盖的区别.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多态_重载_覆盖的区别

多态 重载 覆盖 区别 所谓多态,是指一个程序中同名的不同方法共存的情况。通过继承,一个类可以 用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任 何接口类型。这称为多态性。面向对象的程序中多态的情况有多种,可以通过子 类对父类方法的覆盖实现多态,也可以利用重载在同一个类中定义多个同名的不 同方法。 方法的覆盖:子类对继承自父类的方法的重新定义。 重载:同一个类中定义多个同名方法的情况。 多态情况下进行方法的调用时,如何区分这些同名的不同方法呢? 在覆盖中,由于同名的不同方法是存在于不同的类中,所以只需要在调用方法时, 指明调用的是哪个类的方法,就可以很容易地把它们区分开来。而在重载多态中, 由于重载发生在同一个类中,不能再用类名来区分不同的方法,所以一般采用不 同的形式参数列表,包括形式参数的个数、类型、顺序的不同,来区分重载的方 法。 另外看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用 子类的方法。 例子如下: class Triangle extends Shape { public int getSides() { return 3; } } class Rectangle extends Shape { public int getSides(int i) { return i; } } public class Shape { public boolean isSharp(){ return true; } public int getSides(){ return 0 ; } public int getSides(Triangle tri){ return 3 ; } public int getSides(Rectangle rec){ return 4 ; } public static void main(String[] args) { Triangle tri = new Triangle(); System.out.println(Triangleisatypeofsharp?+tri.isSharp()); Shape shape = new Triangle(); System.out.println(My shape has + shape.getSides() + sides.); } } 红色是重载,绿色是重写,蓝色是继承,粉红是多态 注意Triangle类的方法是重写,而Rectangle类的方法是重载。 比较红色的和粉红的部分就可以发现多态对重载的优点:如果用重载,则在父类 里要对应每一个子类都重载一个取得边数的方法;如果用多态,则父类只提供取 得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。 重载和覆盖的区别: “overload(重载)”: 1、overload方法名时参数类型、个数、顺序至少有一个不相同; 2、不能overload只有返回值不同的方法名; 3、overload存在于父类和子类、同类中。 “override(覆盖)” 1、override时,方法名、参数、返回值相同; 2、子类方法不能缩小父类方法的访问权限; 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常); 4、override存在于父类和子类之间。 方法名,参数相同形成重写,重写的方法不能降低原方法的可见度,也不能改 变原方法的返回值类型。 方法名相同,参数不同(个数、类型)形成重载,重载的方法可看成一个全新的方 法,与原方法相比它可以有不同的可见度和“返回值类型”。如下例: class A { protected int method1(int a, int b) { return 0; } } public class B extends A{ public int method1(int a, int b) { return 0; } //正确,重写父类方法, 可以扩大访问权限 //private int method1(int a, int b) { return 0; } //错误,重写父类方 法,不能降低了访问权限 //private long method1(int a, int b) { return 0; } //错误,重写父类 方法,不能改变返回值类型 public short

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档