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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Rockray 高级黑马   /  2013-10-29 21:18  /  1669 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Rockray 于 2013-10-30 18:50 编辑

学的太久印象就容易遗忘啊

class Demo {
      int show(int a,int b) {
            return 0;
      }
}

问下下面这个函数能否存在于Demo的子类中:
      public short show(int a,int b) {
           return 0;
      }
答案是不可以。

突然不理解了,函数的声明不是包括返回值类型、函数名、参数列表这三个部分吗,然后下面这个函数的返回值类型与父类中的不一样,为什么不能出现在子类中呢?难道不是重载吗?
看来还是基础没打牢啊 {:soso_e115:}

评分

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

查看全部评分

2 个回复

倒序浏览
重载:只看同名函数的参数列表,可以出现在同个类的多个函数之间
int show(int a,int b) {
            return 0;
      }
public short show(int b) {
           return 0;
      }这样是没事的
重写:子父类函数是一模一样的,只发生在子父类直接

评分

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

查看全部评分

回复 使用道具 举报
  重载表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)
class Demo {
      int show(int a,int b) {
            return 0;
      }
}

问下下面这个函数能否存在于Demo的子类中:
      public short show(int a,int b) {
           return 0;
      }

子类和父类的参数都为两个int数、所以不构成重载、重载与返回值无关至于参数类型和个数有关
public short show(int a,short b) {
           return 0;
      }
这样就和demo构成重载了

重载要注意以下的几点:
1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马