当前位置: 首页 > 知识库问答 >
问题:

java中继承中clone()方法调用的委托

笪波鸿
2023-03-14

1.子类扩展父类。2.子类实现Cloneable并重写clone()方法调用super。clone()3.父类既不实现Cloneable接口,也不重写clone(()方法。

输出:克隆父类和子类状态。

问题:在父类没有实现标记接口Cloneable的情况下,父类状态如何被对象类克隆?

class ParentCloneableClass{
    String val;
    public ParentCloneableClass(String val){
        this.val = val;
    }

    public String getVal() {
        return val;
    }
}
class CloneableClass extends ParentCloneableClass implements Cloneable{
    String name;
    public CloneableClass(String name){
        super("parentClass");
        this.name = name;
    }

    @Override
    public   CloneableClass clone() throws CloneNotSupportedException {
        return (CloneableClass) super.clone();
    }

    public String getName() {
        return name;
    }
}

class Demo{
   public static void main(String[] args) throws CloneNotSupportedException {
        CloneableClass cloneableClass = new CloneableClass("deepak");
        CloneableClass cloneableClassCloned = cloneableClass.clone();
   }
}

共有1个答案

宓弘壮
2023-03-14

类<code>Object</code>检查被克隆对象的运行时类型,而不是编译时类型。因此,运行时的对象类型为<code>Cloneable</code>,它确实实现了<code>Cloneable</code>,因此<code>object</code<类相应地执行克隆:

对象的方法克隆执行特定的克隆操作。首先,如果此对象的类未实现接口 Cloneable,则会抛出 CloneNotSupportedException...否则,此方法将创建此对象的类的新实例,并使用该对象的相应字段的内容准确初始化其所有字段,就像通过赋值一样;字段的内容本身不会克隆。因此,此方法执行此对象的“浅拷贝”,而不是“深拷贝”操作。

 类似资料:
  • 问题内容: 假设我有以下两个课程 如果我启动一个beta类型的新对象,如何执行在alpha类而不是beta中找到的逻辑?我可以使用<-我想知道是否可行。 Eclipse IDE中的自动键入功能使我可以选择从class 或class中进行选择。 问题答案: 你可以做: 注意,这是对父级的引用,但是super()是它的构造函数。

  • 我在我的程序中使用了实现继承,我的子类中的方法没有在主方法中被调用。它显示了错误“方法getArea()不在第二类型中定义”。getPerimeter()方法也有同样的问题。 我试过设置值和改变参数。 三角形。有关计算三角形面积的公式,请参见编程练习2.15。toString()方法的实现如下:return“Triangle:side1=“side1”side2=“side2”side3=“sid

  • 问题内容: 我对在继承中使用私有方法感到困惑,例如: 基于上面的代码,我感到困惑的私有方法的继承,是继承了私有方法来?还是两个类中的say方法完全无关?由于代码在main()方法中运行时出错,因此似乎无法从中调用私有方法。 问题答案: 如果您想让子类访问需要保留的超类方法,那么您正在寻找的关键字。 只允许包含该成员的类访问该成员。 允许在类及其所有子类中访问成员。 允许任何人访问该成员。

  • 我有一个扩展了B类的a类。 A是这样定义的,它也覆盖了B的方法: B是这样定义的: 因此,如果我初始化A的一个对象,构造函数将调用调用方法doSomething()的超类之一。但哪一个会被处决?B的实现还是A中被重写的实现?

  • 我是一名新的Java开发人员,在Java中继承的概念定义我的类时遇到了一些困难。。。 在一方面,我有一个通用的类,名为车辆,它定义了几十年的属性(带有它们的getter/setters)。我有一个扩展车辆类的车辆1类。 另一方面,我有一个名为VehicleFactory的泛型类,它定义了一个静态方法,如下所示: 问题是我想创建一个Vehicle1Factory类,它有自己的makeResult方法