|
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (6)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-05-22
348105874 写道 子类不能重载父类的static方法及I
重载是啥你没弄明白吧?概念混淆了。 不能覆盖,但是能隐藏。(同为static的话) |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-22
过了SCJP的人一口就能答出来,也许1.5年前我还对这样问题有兴趣,但现在已经不置可否,冷眼看。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-22
freej 写道 348105874 写道 子类不能重载父类的static方法及I
重载是啥你没弄明白吧?概念混淆了。 不能覆盖,但是能隐藏。(同为static的话) 什么“重载”,“重写”,“覆盖”,“隐藏“,这些译文只是混淆视听的东西;但无奈中国的初学者也往往只能通过这些非常容易混淆的译文来死记众多灵活的语言特性; 其实,搞清楚到底什么是属于类的信息,什么是属于运行时对象的信息,上述问题大可不必死记。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-22
pf_miles 写道 freej 写道 348105874 写道 子类不能重载父类的static方法及I
重载是啥你没弄明白吧?概念混淆了。 不能覆盖,但是能隐藏。(同为static的话) 什么“重载”,“重写”,“覆盖”,“隐藏“,这些译文只是混淆视听的东西;但无奈中国的初学者也往往只能通过这些非常容易混淆的译文来死记众多灵活的语言特性; 其实,搞清楚到底什么是属于类的信息,什么是属于运行时对象的信息,上述问题大可不必死记。 呵呵,你牛,我们比不了。 现在怎么这么多浮躁的人呢,看不起基础,自以为了不起。(一般情况下我都懒的明挑,只是苦笑一声) 译文也是从英文翻译过来的,每个英文原文也是意思和意义各不相同的单词,怎么说是混淆视听。这里面有Java语言和OO的特征点在里面,光和搞清楚类和对象的区别是不够的。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-26
这里 可以这么解释:
其实这里只实例化了一个对象:Test2的 对象。 其中的方法 (static g)属于两个类的本身属性,保存在不同的地址上。 两个类的属性i,属于对象的属性。因为这里只实例化了一个对象 因此i指向的是同一个地方 即test2对象的地址。 而方法f和类的属性i一样,属于对象的属性,因此调用的也是test2的方法。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-23
我认为这种问题很无聊,因为依存于这种知识的代码方式对于工业化的软件开发有害无益
在实际开发当中,我一般遵循以下规则 1.禁止在子类中声明父类中相同名字的变量 2.避免方法名的重载(overload),用以下形式的方法命名来代替重载 public void updateTable4Apply(ParmClass1 parm1); public void updateTable4Approve(ParmClass2 parm2); PS:对重载最恶劣的滥用方式是
public void updateTable(
String parm1,
String parm2,
int parm3,
long parm4,
Date parm5
);
public void updateTable(
String parm1,
String parm2,
int parm3,
long parm4,
Date parm5,
String parm6
);
一般来讲,应当尽量将这些方法参数统合成一个专用的类型ParmClass1 3.尽量避免对父类方法的重写(override), 除非父类的方法是个用意明确、专门被设计用来被子类重写的缺省方法 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-24
继承对变量是不起作用的。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-24
要看引用的是谁,STATIC 静态的只有一个,所以
Test3 t3 = (Test3) t2 指针指向的是Test3的位置.非静态的方法才有多态 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-24
pf_miles 写道 freej 写道 348105874 写道 子类不能重载父类的static方法及I
重载是啥你没弄明白吧?概念混淆了。 不能覆盖,但是能隐藏。(同为static的话) 什么“重载”,“重写”,“覆盖”,“隐藏“,这些译文只是混淆视听的东西;但无奈中国的初学者也往往只能通过这些非常容易混淆的译文来死记众多灵活的语言特性; 其实,搞清楚到底什么是属于类的信息,什么是属于运行时对象的信息,上述问题大可不必死记。 强烈支持,对于一个老程序员来讲这些概念早忘记了,知道如何用才是关键. 这些东西就像自己的手足,难道行走也要用原理来概括? 学英语,不懂语法的人照样能说一口流利的英语,难道开口说话之前都要用语法校验一次吗? 学任何东西都一样,用久了都会由理论转化为本能,转为本能之后就会把长久不用的东西进化掉,就像人的的尾巴. 这些概念确实会误导人,鄙人也是受害者之一,现代理论中的八股文.教材上多举几个实例比这强百倍. |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-25
armorking 写道 我认为这种问题很无聊,因为依存于这种知识的代码方式对于工业化的软件开发有害无益
在实际开发当中,我一般遵循以下规则 1.禁止在子类中声明父类中相同名字的变量 2.避免方法名的重载(overload),用以下形式的方法命名来代替重载 public void updateTable4Apply(ParmClass1 parm1); public void updateTable4Approve(ParmClass2 parm2); PS:对重载最恶劣的滥用方式是
public void updateTable(
String parm1,
String parm2,
int parm3,
long parm4,
Date parm5
);
public void updateTable(
String parm1,
String parm2,
int parm3,
long parm4,
Date parm5,
String parm6
);
一般来讲,应当尽量将这些方法参数统合成一个专用的类型ParmClass1 3.尽量避免对父类方法的重写(override), 除非父类的方法是个用意明确、专门被设计用来被子类重写的缺省方法 你说的第2条有点问题,各有优缺点的。 JDK的很多方法都是这样重载的,一方面没什么不好,另一方面重构的时候扩展一般都是这样扩展的,老接口定义的方法怎么能随便动。 我来告诉你ParmClass1会有什么问题,你这种方式我取个名字叫“参数打闷包”,自己用起来非常方便,要加个参数,类里面加个属性就好了,但是代码可读性非常差,只有你知道这个ParmClass1在这个方法中用了哪几个参数。然后你一定反驳说,可以注释写得详细一点嘛,我认为注释、配置一概都算代码工作量,注释的工作量一算进去,还不如参数扁平化直观呢。 一般也就比较内聚的接口才会考虑用用“参数打闷包”,大模块之间的接口,一般是不会这样的。 |
|
| 返回顶楼 | |







