创建一个将一个类强制转换为另一个类的clone()方法

时间:2014-04-13 21:57:57

标签: java class clone

我们有了编写clone()方法的要求,以便执行以下附加代码:

Circuit c = (Circuit) p2.clone();
System.out.println( c + " = " + c.getResistance());

会产生这样的结果:

( ( ( ( 2.0 + 3.0 ) || 4.0) + 1.0 ) || 8.0) = 2.297029702970297

为了简洁起见,我不会发布所有使用的方法和构造函数(不幸的是,很多,所以如果我想要满足SSCCE的问题标准,那么发布它们肯定不会简洁明了),但我会用这个主要方法向你展示p2是什么:

SeriesCircuit s1 = new SeriesCircuit(new Circuit(2.0), new Circuit(3.0));
ParallelCircuit p1 = new ParallelCircuit(s1, new Circuit(4.0));
SeriesCircuit s2 = new SeriesCircuit(p1, new Circuit(1.0));
ParallelCircuit p2 = new ParallelCircuit(s2, new Circuit(8.0));

使用此:

System.out.println(p2 + " = " + p2.getResistance());

还会打印:

( ( ( ( 2.0 + 3.0 ) || 4.0) + 1.0 ) || 8.0) = 2.297029702970297

P.S。我完成了导致.clone()要求的所有部分。

作业中提出的问题要求我们将SeriesCircuit / ParallelCircuit / Circuit转换为SeriesCircuit / ParallelCircuit / Circuit使用.clone()方法。

每个ParallelCircuitSeries类都包含自己的(唯一)私有变量,这些变量通过.getResistance()(返回double)或{{}输出1}},它获取格式化的字符串,与上面看到的不同。

有人可以向我解释如何将具有自己的私有变量的类转换为另一个类吗?我不是要求完成代码,虽然我对这个概念有所了解,但我不知道如何执行它。

1 个答案:

答案 0 :(得分:0)

您需要您的类来实现Cloneable接口。然后,您可以覆盖clone()方法。此方法通过调用super.clone()获取新对象,然后通过赋予内在函数(和不可变量)​​或克隆对象来复制数据值。作为继承自类X的类Y的示例 -

public class X implements Cloneable {

   private int someVariable;

   public X clone() throws CloneNotSupportedException
   {
       X newX=super.clone();
       newX.someVariable=this.someVariable;
       return newX
   }

public class Y extends X implements Cloneable {

   private Z someClassVariable;
   private float myVariable;

   public Y clone() throws CloneNotSupportedException
   {
       Y newY=super.clone();
       newY.someClassVariable=this.someClassVariable.clone();
       newY.myVariable = this.myVariable;

       return newY;
   }


   public class Z implements Cloneable {

   private int someOtherVariable;

   public Z clone() throws CloneNotSupportedException
   {
       Z newZ=super.clone();
       newX.someOtherVariable=this.someVariable;
       return newZ
   }