阅读 15886 次
发表时间:2008-05-25
程序跑到System.out.println(t3.i);这一行的时候堆栈里信息如下图
t2保存了2个i的值 好神奇啊 一个是它自己的  一个是它继承而来的

1-System.out.println(t3.i);//由前期绑定变量可知 显示Test3类的i 所以为1
2-System.out.println(t3.f());//由方法重写[override](后期绑定方法)可知 调Test2类对象的f方法 而Test2类对象i=2(它当然不会选继承来的1) 故-2
3-System.out.println(t3.g()); //这个很简单 静态方法不能被子类重写 当然用Test3的g咯

PS:
2 3 都很好理解
关键是子类如果和父类实例变量名称类型一样。。。子类是能继承过来的。。。只不过子类会用自己的。。。就如楼上说的,父类那个i被藏起来了。
好毒啊。。。我也做错了第1个 以为父类那个i被覆盖了 其实不然  它还在 晕!!!别笑我菜 我真是学到了。。。

好题目 考基础 但是开发当中 最好别那么用!!!
  • 描述: 堆栈值
  • 大小: 7.1 KB
发表时间:2008-05-27


引用
你说的第2条有点问题,各有优缺点的。

JDK的很多方法都是这样重载的,一方面没什么不好,另一方面重构的时候扩展一般都是这样扩展的,老接口定义的方法怎么能随便动。

我来告诉你ParmClass1会有什么问题,你这种方式我取个名字叫“参数打闷包”,自己用起来非常方便,要加个参数,类里面加个属性就好了,但是代码可读性非常差,只有你知道这个ParmClass1在这个方法中用了哪几个参数。然后你一定反驳说,可以注释写得详细一点嘛,我认为注释、配置一概都算代码工作量,注释的工作量一算进去,还不如参数扁平化直观呢。

一般也就比较内聚的接口才会考虑用用“参数打闷包”,大模块之间的接口,一般是不会这样的。


我觉得这样参数打包也没有什么不好的
具体问题具体分析了
有的时候构造一个参数类比一串String 做参数好

我使用过一个公司提供的api,竟然需要16个参数,真的不晓得他们是怎么设计的
发表时间:2008-05-27
基本的东西!学习了!
发表时间:2008-05-27
曾经在看基础书的时候也看见过这样的问题.

但是在实际中,我想是不会写这样程序的.
发表时间:2008-05-27
lzmhehe 写道


引用
你说的第2条有点问题,各有优缺点的。

JDK的很多方法都是这样重载的,一方面没什么不好,另一方面重构的时候扩展一般都是这样扩展的,老接口定义的方法怎么能随便动。

我来告诉你ParmClass1会有什么问题,你这种方式我取个名字叫“参数打闷包”,自己用起来非常方便,要加个参数,类里面加个属性就好了,但是代码可读性非常差,只有你知道这个ParmClass1在这个方法中用了哪几个参数。然后你一定反驳说,可以注释写得详细一点嘛,我认为注释、配置一概都算代码工作量,注释的工作量一算进去,还不如参数扁平化直观呢。

一般也就比较内聚的接口才会考虑用用“参数打闷包”,大模块之间的接口,一般是不会这样的。


我觉得这样参数打包也没有什么不好的
具体问题具体分析了
有的时候构造一个参数类比一串String 做参数好

我使用过一个公司提供的api,竟然需要16个参数,真的不晓得他们是怎么设计的


至少这样的接口不容易出错,重构也没问题。

你再仔细想想,如果你定义一个ParmClass的参数类,其实是很死的,不灵活的,因为你发布新版的时候你很难保证这个ParmClass不变,有时候这个ParmClass行为改变带来的困扰会远远超过16个参数。

16个参数就是多了点,但是还是很清楚的嘛。

从代码上来看,你新建一个ParmClass,调用16次set方法,和直接调用16个参数的代码分16行对齐,差不多的嘛,不满意自己封装一下也行的啊。

再举个例子,比如JS框架EXT,你看看它的参数方式,拓展一下思路。
Global site tag (gtag.js) - Google Analytics