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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张森 中级黑马   /  2013-1-11 09:30  /  1075 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看视频毕老师练习中的选择题
class Demo{
      int show(int a,int b){return 0;}
}
下面哪些函数可以存在Demo的子类中。
D.public short show (int a, int b){return 0;}  这个不可以, 这个是不是因为假设Demo d = new DemoZi();d.show()虚拟机不知道调用哪个方法呢
E.static int show(int a, int b){retrurn 0;}这也不可以   静态只能重写静态的  这个是为什么呢  ,希望从运行原理分析啊  谢谢

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
这要从类的覆写说起,重写的特点是:
1、子类重写父类的方法时,访问权限要大于等于父类的权限,不能低于父类的权限。
2、子类重写父类的方法时,如果父类抛出异常,那么子类只能抛出父类异常或异常子类,或者不抛出异常.
3、子类重写父类的方法时,方法的输入参数是父类方法的输入参数或其输入参数的子类。
4、子类重写父类的方法时,方法的输出参数是父类方法的输出参数或其输出参数的父类
根据上述,因为int和short没有继承关系,它们分别属于不同的方法,因为其方法名相同,所以出错。
5、子类不能重写父类的静态方法。
6、子类重写父类的方法时,不能修饰为静态。
7、父类的静态方法可以被子类重写为静态。
根据上述,因为父类的方法不是静态,所以不能在子类中用静态的方式重写父类的方法。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 陈丽莉 于 2013-1-11 16:37 编辑

从原理分析的话,
1、静态方法的生存周期是和类等长的,随着类的加载而加载(到内存);
     而非静态是要对象调用才加载的,使用完毕就释放空间。
2、而且调用的时候,静态方法可以直接加类名调用。

并且java是可以有爷爷、爸爸、孙子这样继承的。
如果非静态可以覆盖静态,那么:
一会儿用类名调用这个函数,一会儿又必须建立实例对象才能调用;
一会儿这个函数消亡了,一会儿又要被加载到内存和该类共存。。。
未免就太乱了。。。
希望能帮助到你~  

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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