该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-27
我三天两头被新手和隐藏 所以我决定以后不再写任何东西 习惯就好
|
|
返回顶楼 | |
发表时间:2009-05-27
linliangyi2007 写道 靠这也叫新手帖!!
javaeye上有几个新手提这样的问题啊!! 提问题也要有层次好啵?动不动就评新手帖,无语! 嗯,投你一票良好 |
|
返回顶楼 | |
发表时间:2009-05-27
linliangyi2007 写道 jianfeng008cn 写道 KimShen 写道 Test有private Id字段 Test的id应该是public的吧 private 的,因为是在同一个类的内部,所以private可以直接引用 other 不是外面传进去的吗?怎么变成了同个类的内部了? |
|
返回顶楼 | |
发表时间:2009-05-27
jianfeng008cn 写道 linliangyi2007 写道 jianfeng008cn 写道 KimShen 写道 Test有private Id字段 Test的id应该是public的吧 private 的,因为是在同一个类的内部,所以private可以直接引用 other 不是外面传进去的吗?怎么变成了同个类的内部了? 这种情况下,private是没有问题地. private:除了包含这个成员的类外,其他任何类都无法访问这个成员(说的是类,不是对象) |
|
返回顶楼 | |
发表时间:2009-05-27
最后修改:2009-05-27
这个贴投新手帖很正常啊,要正视自己的水平,我就是新手。不过我自己投了良好~~~
|
|
返回顶楼 | |
发表时间:2009-05-27
虽然我不会投楼主新手帖,但是楼主完全应该在发帖前多测试几下嘛。
这种情况,楼主只要在equals方法中打印几行,几个判断的结果很容易就能发现是哪一个判断返回false。至少到这一步你能知道是other.id不是你预期的结果。 |
|
返回顶楼 | |
发表时间:2009-05-27
icewubin 写道 虽然我不会投楼主新手帖,但是楼主完全应该在发帖前多测试几下嘛。
这种情况,楼主只要在equals方法中打印几行,几个判断的结果很容易就能发现是哪一个判断返回false。至少到这一步你能知道是other.id不是你预期的结果。 首先 赞同 然后 我没积分所以没投了票不好意思 |
|
返回顶楼 | |
发表时间:2009-05-27
package com.bobo;
public class TestMain { public static void main(String[] args) { new TestMain().test(); } public void test() { Parent p = new Son(); // 结果0 System.out.println(p.id); Son s = (Son) p; // 结果1 System.out.println(s.id); /* * 总结: * 属性没@Override * 属性是隐藏,引用是什么类型就调用什么熟悉,方法呵呵大家清楚 */ } class Parent { private int id = 0; public int getId() { return this.id; } } class Son extends Parent { // @Override没有这个概念哦 private int id = 1; @Override public int getId() { return this.id; } } } |
|
返回顶楼 | |
发表时间:2009-05-27
从这个问题看LZ对java的equlas与hashcode没有理解清楚;
这两个方法是留个自己实现的; 我完全可以写个equals永远返回false,hashcode永远返回一样; 说个实际点的吧; set 放进去的东西能找到吗? package com.bobo; import java.util.HashSet; import java.util.Random; import java.util.Set; public class TestMain { public static void main(String[] args) { new TestMain().test1(); } public void test1() { Set set = new HashSet(); set.add(new A()); // false System.out.println(set.contains(new A())); set.add(new B()); // true System.out.println(set.contains(new B())); set.add(new C()); // true System.out.println(set.contains(new C())); A a = new A(); set.add(a); // true System.out.println(set.contains(a)); B b = new B(); set.add(b); // true System.out.println(set.contains(b)); C c = new C(); set.add(c); // 大部分情况下是false System.out.println(set.contains(c)); } class A { } class B { @Override public int hashCode() { return 1; } @Override public boolean equals(Object obj) { return true; } } class C { @Override public int hashCode() { return new Random().nextInt(); } @Override public boolean equals(Object obj) { return true; } } } 理解哈吧,研究哈吧;其实很多书上也讲了; 关键是你思考没有,研究没有; |
|
返回顶楼 | |
发表时间:2009-05-27
jianfeng008cn 写道 linliangyi2007 写道 jianfeng008cn 写道 KimShen 写道 Test有private Id字段 Test的id应该是public的吧 private 的,因为是在同一个类的内部,所以private可以直接引用 other 不是外面传进去的吗?怎么变成了同个类的内部了? 因为在读取private属性前,other被做了cast操作,强制转成当前对象类型,这时候就允许直接访问对象内部的private属性了,你可以自己写个方法试试,比如,在CLASSA中,有个方法methodA,传入一个参数p1,如果p1 instanceof CLASSA,你就可以将它cast,然后直接读取p1的私有变量了! |
|
返回顶楼 | |