6楼可说的是这样: A.java-------------public class A { static int i=2; public A(){ } public static int getI() { return i; } public static void setI(int i) { A.i = i; } }C.java----------public class C extends A {
}B.java-----------------public class B extends A { public static void main(String[] args) { System.out.println(getI()); C c = new C(); c.setI(10); System.out.println(getI()); }} 输出如下: 2 10看B的main方法,在C没操纵A中的属性i时B继承而来的值是2,C操纵之后B继承而来的值是10; 我现在要的就是怎么在C操纵之后B得到的还是2。 也许6楼说的意思我没明白,能不能再讨论下,昨天停电了,不好意思没上网。
楼主【degree41】截止到2008-06-27 00:48:52的历史汇总数据(不包括此帖):
发帖数:2 发帖分:10
结贴数:2 结贴分:10
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
B b1 = B.getInstance();
B b2 = (B)b1.clone();
输出:
b1.toString()和b2.toString()不同;但是为什么输出b1.getList().toString()和b2.getList().toString()相同呢?
也就是说需要的没有深clone,刚看这个,有点懵,有谁给解释下啊
A.java-------------public class A {
static int i=2;
public A(){
}
public static int getI() {
return i;
}
public static void setI(int i) {
A.i = i;
}
}C.java----------public class C extends A {
}B.java-----------------public class B extends A { public static void main(String[] args) {
System.out.println(getI());
C c = new C();
c.setI(10);
System.out.println(getI());
}}
输出如下:
2
10看B的main方法,在C没操纵A中的属性i时B继承而来的值是2,C操纵之后B继承而来的值是10;
我现在要的就是怎么在C操纵之后B得到的还是2。
也许6楼说的意思我没明白,能不能再讨论下,昨天停电了,不好意思没上网。
我现在就是要避免CDE类持有B类中list引用的情况,我想让CDE类在进行算法之前,得到的都是B中的list的初始内容。也就是说,在进行算法前,CDE类持有的都是B类对象copy而非引用。
private List list; B(List l) {
this.list = Collections.unmodifiableList(list);
} public List getList() {
return list;
}
}