Cast对象是克隆对象,还是Java中的引用?

时间:2018-03-05 20:23:13

标签: java object casting

我目前正在开发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?

1 个答案:

答案 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;