1.Object是所有类的父类,任何类都默认继承Object,即直接或间接的继承java.lang.Object类。由于所有的类都继承在Object类,因此省略了
extends Object关键字。

2.Object类中主要有以下方法:

  toString()  getClass()  equals()  clone()  finalize()  notify()  notifyAll()  wait()

其中toString(),getClass(),equals()是其中最重要的方法。getClass(),notify(),notifyAll(),wait()等方法被定义为final类型,因此不能重写。

 

3.clone()方法

public class Object  {
    protected native Object clone() throws CloneNotSupportedException;
}

(1) clone()存在的原因是Java里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递。可以在类中复写clone方法以实现深拷贝。
(2) Object类的 clone() 方法是一个native方法,native方法的效率一般来说都是远高于Java中的非native方法。这也解释了为什么要用Object中clone()
方法而不是先new一个类,然后把原始对象中的信息复制到新对象中。
(3) 必须要重写clone()方法以达到在类外使用的目的。
(4) Object.clone()方法返回一个Object对象, 必须进行强制类型转换才能得到我们需要的类型。

在派生类中实现Cloneable接口。奇怪的发现Cloneable竟然是空的,它仅仅是一个标志,而且这个标志也仅仅是针对 Object类中 clone()方法的,如果 clone 类没有实现
Cloneable 接口,并调用了 Object 的 clone() 方法(也就是调用了 super.Clone() 方法),那么Object 的 clone() 方法就会抛出
CloneNotSupportedException 异常。

clone使用demo1:

class Person implements Cloneable { //clone()是Object类中的protected成员方法。继承Cloneable只是为了运行时不要报异常。
    private int age ;
    private String name;
    
    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }
    
    public Person() {}
 
    public int getAge() {
        return age;
    }
 
    public String getName() {
        return name;
    }
    
    /*
     * 这里必须要复写Object类的clone()方法,原因:
     * Object类中的clone()方法是protected权限,只能在本包中或者在其它包的子类中访问(注意是子类中)
     * 这里重写一下,虽然还是protected的,但是可以在本包中访问了。
     */
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}


public class Test {
    public static void main(String args[]) {
        Person p = new Person(23, "zhang");
        Person p1 = null;
        try {
            p1 = (Person) p.clone(); //非子类中访问clone()方法
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }

        if (p1 != null) {
            System.out.println(p); //若引用的是同一个类,打印的hash值是一样的,clone的是不同的
            System.out.println(p1);    
        }
    }
}
View Code

相关文章:

  • 2021-05-27
  • 2021-09-05
  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
  • 2022-12-23
  • 2021-11-04
  • 2021-07-19
猜你喜欢
  • 2022-12-23
  • 2021-12-19
  • 2021-08-04
  • 2022-12-23
  • 2022-02-25
  • 2022-12-23
  • 2021-06-19
相关资源
相似解决方案