我目前正在开发Java游戏,我将整个游戏保存为数组以便渲染它,因此,我注意到有时对象似乎当我将它们设置为相等时,会与其他对象纠缠在一起。虽然经过一些研究后,我得出结论,我只是创建了对同一个对象的新引用。我已经尝试了各种方法来避免这个问题并且相当成功。但是我沿途尝试的其中一个tequince,只是将对象转换为另一种类型,作为一个粗略的例子:
public class Apple {
boolean TasteLikaAnApple;
public Apple {
TasteLikeAnApple = true;
}
public ChangeTaste (boolean newTaste) {
TasteLikeAnApple = newTaste;
}
}
public class Pear{
boolean TasteLikaAnApple;
public Apple {
TasteLikeAnApple = false;
}
public ChangeTaste (boolean newTaste) {
TasteLikeAnApple = newTaste;
}
}
public class main {
public static void main (String[] args) {
Apple fruit1 = new Apple();
Pear fruit2 = new Pear();
fruit2 = (Pear) fruit1;
fruit2.ChangeTaste(false);
}
}
现在,我不知道我是否可以将Pear送到Apple,但上面的代码应该让你大致了解我的想法:
施放是否会创建新对象,还是只是另一个引用?
或者在给定代码的上下文中,fruit1也将其字段TasteLikeAnApple设置为false?
答案 0 :(得分:0)
"投射是否会创建一个新对象,或者它只是另一个对象 引用"
他们中没有人。转换允许从类型分配到兼容类型(相同的层次结构)。
所以你从Apple到Pear的演员没有任何意义,因为Apple和Pear不能成为同一层次结构的一部分,更具体地来说就是这里(向下转发)Apple
不是Pear
的子类}:
Apple fruit1 = new Apple();
Pear fruit2 = new Pear();
fruit2 = (Pear) fruit1;
假设一个Fruit类及其两个子类:Apple和Pear 你可以这样做这些垂头丧气:
Fruit appleFruit = new Apple();
Fruit pearFruit = new Pear();
Pear pear = (Pear) pearFruit;
Apple apple = (Apple) appleFruit;
或者这个upcast:
Apple apple = new Apple();
Fruit appleFruit = apple;