黑马程序员技术交流社区

标题: 大家看看这个选择题 [打印本页]

作者: 张森    时间: 2013-1-11 09:30
标题: 大家看看这个选择题
看视频毕老师练习中的选择题
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;}这也不可以   静态只能重写静态的  这个是为什么呢  ,希望从运行原理分析啊  谢谢

作者: 熊永标    时间: 2013-1-11 10:43
这要从类的覆写说起,重写的特点是:
1、子类重写父类的方法时,访问权限要大于等于父类的权限,不能低于父类的权限。
2、子类重写父类的方法时,如果父类抛出异常,那么子类只能抛出父类异常或异常子类,或者不抛出异常.
3、子类重写父类的方法时,方法的输入参数是父类方法的输入参数或其输入参数的子类。
4、子类重写父类的方法时,方法的输出参数是父类方法的输出参数或其输出参数的父类
根据上述,因为int和short没有继承关系,它们分别属于不同的方法,因为其方法名相同,所以出错。
5、子类不能重写父类的静态方法。
6、子类重写父类的方法时,不能修饰为静态。
7、父类的静态方法可以被子类重写为静态。
根据上述,因为父类的方法不是静态,所以不能在子类中用静态的方式重写父类的方法。
作者: 陈丽莉    时间: 2013-1-11 16:36
本帖最后由 陈丽莉 于 2013-1-11 16:37 编辑

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

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2