ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

重写和重载

2022-06-08 08:35:13  阅读:137  来源: 互联网

标签:eat 子类 方法 重载 父类 重写 public


  继承可以增强代码的复用性,使得超类的public和protected成员可以在其子类中直接使用。然而有的子类有其特殊性,可能需要修改父类中的部分方法以满足其特殊需求,这便可以在子类中重写(overriding)这个方法来实现,但要注意,final修饰的方法不可重写。

  重写的方法与原方法同名、同参数列表且同返回类型,在实际执行时应该调用哪个方法在运行时决定。如果使用父类的对象调用该方法,则运行父类版本的方法;如果用子类对象,则执行子类版本。当子类包含覆盖超类方法的方法时,它还可以使用关键字super来调用超类的方法。另外,子类中重写的方法的访问权限应该与父类相同或者更加严格 。

  重载(overloading)是实现特殊多态(Ad hoc polymorphism)的一种手段。重载方法允许我们在类中重用相同的方法名,但其参数列表必须与已有的同名方法不同。重载在编译阶段决定具体要执行哪个方法,属于的静态类型检查。除了参数列表必须不同,重载方法的返回值类型、访问权限则可相同也可不同。我们可以在同一个类中进行重载,也可在其子类中重载。注意,子类在重载父类方法时,也继承了父类的被重载的方法。

下面针对public void method (int a, String b)给出几个具体的重载的例子,其中前三个是合法的重载,后两个是错误的:

1. public int method (int a, float b);

2. public void method (int a, String b, double c);

3. public void method (String a, int b);

4. public void method (int m, String n);

5. public String method (int a, String b);

  另外,此处再列出一个具体例子来体现重载和重写方法的针对具体的实例对象的执行情况,行6的方法是重载,行8的方法是重写:

 1 class Animal { 
 2 public void eat() 
 3 {System.out.println("I'm an animal. I like eating everything!");}
 4 }
 5 class Horse extends Animal {
 6 public void eat(String food) 
 7 {System.out.println("I'm a horse. I like eating "+ food);}
 8 public void eat() 
 9 {System.out.println(“I‘m a horse. I like eating grass!"}
10 }

下面是对方法的具体引用:

 1 Animal a = new Animal();
 2 a.eat();          //I'm an animal. I like eating everything!
 3 
 4 Horse h = new Horse();
 5 h.eat();          //I'm a horse. I like eating grass!
 6 
 7 Animal ah = new Horse();
 8 ah.eat();             //I'm a horse. I like eating grass!
 9  
10 Horse he = new Horse();
11 he.eat("Apples!");    //I'm a horse. I like eating Apples!
12  
13 Animal a2 = new Animal();
14 a2.eat("Carrots");    //error!
15  
16 Animal ah2 = new Horse();
17 ah2.eat("Carrots");  //error!

前两个是简单的父类对象调用父类方法,子类对象调用子类重写的方法;第三个是父类声明但子类创建的对象,调用了子类中的重写的方法,这是在运行时才确定的;第四个则是常规的对重载方法的调用;第五个报错了,因为父类中没有这种带String参数的方法;最后一个也是如此,即使它是通过子类Horse创建的对象,仍然在编译时因父类中没有对应方法而报错了。

 

标签:eat,子类,方法,重载,父类,重写,public
来源: https://www.cnblogs.com/diguawan/p/16354186.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有