A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

小怪兽

高级黑马

  • 黑马币:1

  • 帖子:498

  • 精华:0

© 小怪兽 高级黑马   /  2014-1-11 15:33  /  1923 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


什么时候应该用复写,复写的特点是什么啊,有点弄不清复写,顺便说下这三个的区别之处吧 ,先谢谢了

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 淡定

查看全部评分

13 个回复

倒序浏览
本帖最后由 浮出一个美 于 2014-1-11 16:16 编辑

覆写(overriding):是指在类继承时,子类重新定义了从父类继承来的方法.
重载(overloading):是指在一个类中,有多个同名方法,只是方法的参数列表不同,适用于不同的调用情况.
上代码:
  1. package com.heima.bbs;
  2. /**
  3. * 覆写Overriding
  4. * 重载Overloading
  5. */

  6. public class Demo1
  7. {

  8.         public static void main(String[] args) {
  9.                         //由于子类覆写了父类的function()方法,所以这里会执行子类的funcion()
  10.                         //如果子类没有覆写父类的function()方法,就会执行父类的funcion()
  11.                         new child().function();
  12.                         new child().function(22,"黑马程序员");
  13.                         new child().function("黑马程序员", 22);
  14.         }

  15. }
  16. //父类
  17. class parent{
  18.         public void function(){
  19.                 System.out.println("父类方法");
  20.         }
  21. }

  22. //子类
  23. class child extends parent{

  24.         //这个子类的方法就覆写了父类的同名同参方法
  25.         @Override
  26.         public void function() {
  27.                 System.out.println("子类方法");
  28.         }
  29.         //这个就是方法的重载,Overloading
  30.         //重载的特点有:方法名相同,参数列表不同
  31.         //参数列表相不相同取决于三点:参数类型,参数个数,和参数顺序
  32.         public void function(int age,String name) {
  33.                 System.out.println("方法一:我是"+name+",今年"+age+"岁");
  34.         }
  35.         public void function(String name,int age) {
  36.                 System.out.println("方法二:我是"+name+",今年"+age+"岁");
  37.         }
  38. }
复制代码



点评

赞一个,讲的很详细,很感激  发表于 2014-1-11 17:32

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 赞一个!

查看全部评分

回复 使用道具 举报
复写和重写是一个意思。
复写:就是一个类继承了一个父类或者实现了某个接口,有些情况下需要覆盖其父类中的某些方法。也就是说子类中的方法与父类中的方法一模一样,而且参数列表(参数个数和参数类型)也相同。只不过子类的实现方式不同(简单地说就是覆盖的方法内部的代码不同)。   注意:覆盖父类方法时,子类的权限一定要大于父类中的权限,否则的话就不能称之为复写。
重载:一个类中的两个或多个方法的名称相同,但是参数列表不同,就称之为重载。重载只看方法名和参数列表。方法名相同,只要参数列表不同就成为重载。(注:重载与返回类型无关)。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 淡夜清风 于 2014-1-11 16:34 编辑

复写和重写都是一个意思。也叫覆盖。主要用在类的继承里面。
子类继承父类后,拥有父类的所有非私有成员方法和成员变量。
如果子类里面又定义了一个与父类一模一样的成员方法,这个就叫复写。
主要用在子类对父类的成员方法不满意,想增强扩展功能时。子类就可以复写父类的成员方法。
复写也多用在多态。
重写的具体规范:
1、子类的方法名称返回类型及参数签名 必须与父类的一致
2、子类方法不能缩小父类方法的访问权限
3、子类方法不能抛出比父类方法更多的异常
4、方法覆盖只存在于子类和父类之间,同一个类中只能重载
5、父类的非静态方法不能被子类覆盖为静态方法
6、父类的私有方法不能被子类覆盖
7、父类的抽象方法可以被子类通过两种途径覆盖(即实现和覆盖)
8、父类的非抽象方法可以被覆盖为抽象方法
--------------
重载
简单的说,一个类中的两个或两个以上的方法名字相同,但是参数列表不同,这就叫做方法的重载。
方法重载具体规范:
       1、方法的名称必须相同。
       2、方法的参数必须不同,这里的不同分三种情况:
          a、参数个数不同,类型无限制;
          b、参数个数相同,但是参数类型不同;
          c、参数个数和类型都相同,但是参数的顺序不同;
       3、方法的返回类型和修饰符可以相同,也可以不同。

具体例子可参考楼上。。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼主您好,个人认为,覆写和重写应该是一个意思吧。
覆写是继承中子类的某一方法重写了父类中的同名方法,要求子类中的该方法与父类中被覆盖的方法函数名、参数列表、返回值一致,访问修饰符权限应大于等于父类被覆盖方法的访问修饰符权限。另外,子类覆盖方法在子类中,父类被覆盖方法在父类中,他们一般并不是在一个类中;
而重载是要求重载的两方法函数名一致参数列表必须不一致,返回值访问权限没有什么要求。另外,重载可以在一个类中也可以不在一个类中。不在一个类中是体现在子父类中的方法重载。
希望可以帮到楼主,有什么不对的,欢迎批评指正。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
松毛 发表于 2014-1-11 16:33
复写和重写是一个意思。
复写:就是一个类继承了一个父类或者实现了某个接口,有些情况下需要覆盖其父类中 ...

原来复写就是重写啊,我说呢,吓我老半天,太感谢了
回复 使用道具 举报
淡夜清风 发表于 2014-1-11 16:33
复写和重写都是一个意思。也叫覆盖。主要用在类的继承里面。
子类继承父类后,拥有父类的所有非私有成员方 ...

原来如此,感谢感谢
回复 使用道具 举报
翼展哈哈 发表于 2014-1-11 16:47
楼主您好,个人认为,覆写和重写应该是一个意思吧。
覆写是继承中子类的某一方法重写了父类中的同名方法, ...

好的好的 谢谢了  帮了我很多  很感谢
回复 使用道具 举报
你所说的复写和重写是一个意思,指的是子类继承父类时,复写了父类的方法,也就覆盖父类方法。
重载指的是同一类中不同函数意义相同,所以起的名字相同,但接收的参数不同。使用时看参数区分函数,叫函数重载

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
复写就是重写,复写的条件之一是要有继承,复写要函数名和类型以及参数列表相同,重载是函数名相同,参数列表的个数顺序参数类型不同.

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
问题解决了就将问题分类改为已解决,以后的问题贴也要及时更改哦,保持队形,谢谢合作!
回复 使用道具 举报
ily521125 发表于 2014-1-11 22:23
问题解决了就将问题分类改为已解决,以后的问题贴也要及时更改哦,保持队形,谢谢合作! ...

哦哦  新手不懂,请谅解,以后会注意这个问题的,谢谢版主提醒
回复 使用道具 举报
小怪兽 发表于 2014-1-11 23:19
哦哦  新手不懂,请谅解,以后会注意这个问题的,谢谢版主提醒

不用这么客气!我们都是为黑马而努力的人!加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马