求助!!!父类实例转子类实例!!

quinn_mai 2011-07-07 10:41:42
一般来说父类实例没办法转为子类实例,但是我现在遇到下面例子类似的问题,求高手帮忙解决

假设有一个computer类 (第三方编写,无法修改)

现在我想编写一个computer类的子类mycomputer,只比computer多一个变量mypassword

public mycomputer extends computer {
private String mypassword

public setMypassword (String password) {
mypassword = password;
}

public String getMypassword () {
return mypassword
}
......
}

有没有可能实现以下逻辑

computer a = factory.getcomputer("1234567(电脑的序列号)");
mycomputer b = (mycomputer)a;
b.setMypassword("1111111");
system.out.println(factory.getcomputer("1234567").getMypassword())
运行结果是系统输出 1111111

大致的逻辑意思是,"电脑公司"(factory)能够通过电脑的序列号查到每一台"电脑"(computer)。我从"电脑公司"买了一台电脑,输入了密码以后就变成了一个"我的电脑"(mycomputer)。然后还是可以通过在电脑公司查询序列号的方法来找到这个已经变成了"我的电脑"的"电脑",并且用"我的电脑"内部的方法得到该"电脑"的密码(password)

我上面的写法肯定是不能运行的,求高手解答,看有没有什么比较好的方法来实现上面的逻辑

...全文
419 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
suifeng_ 2011-07-14
  • 打赏
  • 举报
回复
考虑动态代理能实现吗?
飞跃颠峰 2011-07-07
  • 打赏
  • 举报
回复
public mycomputer {
computer c;
String password
public mycomputer(computer c) {
this.c = c;
}
}

computer a = factory.getcomputer("1234567(电脑的序列号)");
mycomputer b = new mycomputer(a);
quinn_mai 2011-07-07
  • 打赏
  • 举报
回复
问题是现在factory 和 computer我都不能修改,假设factory内有一个电脑库里面有很多电脑个体,同时还包含很多可以对这些电脑个体进行操作的方法。

我想做的是做一个computer的子类mycomputer,从而可以为computer添加一些新的属性和方法。然后通过某种办法把factory内电脑库中的某个电脑个体A转成这个子类mycomputer。我所希望的效果是,因为A还是一个computer,所以factory内的所有方法对A还适用,同时A又具备了mycomputer所添加的一些新的属性。

不知道有什么方法达到这个效果,概括来说,我是希望对一个我不能修改的类的个体增加一些新的属性,但是并不产生新的个体。或者不用父类子类的关系也行。
zn85600301 2011-07-07
  • 打赏
  • 举报
回复
除了类名不规范 没什么问题
Fly_m 2011-07-07
  • 打赏
  • 举报
回复
factory.getcomputer("1234567(电脑的序列号)");
修改它的实现返回 myComputer实例,外面就可以强制转换了
quinn_mai 2011-07-07
  • 打赏
  • 举报
回复
唉,没有别的办法的话只好用hashmap了
飞跃颠峰 2011-07-07
  • 打赏
  • 举报
回复
如果computer是个接口的话可以做到,是个类有点难办,暂时还没想到什么好方法
quinn_mai 2011-07-07
  • 打赏
  • 举报
回复
可能之前说的不清楚,假设别人做好了一个叫computer的类,然后我自己定义了一些computer的属性,针对一个computer个体这些属性值需要很长的时间运算才能得到。因为我的程序需要反复的调用各个computer个体的属性值,我不想每一次都重新算一遍。所以我想能不能通过某种方法进行类似于预处理的步骤,先把所有个体的属性值都算出来,然后把这些值和这些个体连接起来,这样每当我调用这些个体时,可以直接得到这些属性值,而不需要重新计算。

但是有两点限制,第一我没有办法直接对computer这个类进行修改。第二这个程序里还存在很多其他不能修改的方法都是对computer这个类进行操作的,所以我也不能直接建一个新类把computer看成其中的一个元素,这样的话这个新类就不是computer了,那些针对computer进行操作的方法也就都不能用了

概括来说,我是希望对一个我不能修改的类的个体增加一些新的属性,但是并不产生新的个体。

如果不用继承关系的话,不知道有没有办法把两个无法进行内部修改的个体联系起来,通过其中一个个体可以直接找到另外一个个体
quinn_mai 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alexandertech 的回复:]

public mycomputer {
computer c;
String password
public mycomputer(computer c) {
this.c = c;
}
}

computer a = factory.getcomputer("1234567(电脑的序列号)");
mycomputer b = new mycompute……
[/Quote

这样就产生新的个体了....

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧