java中object超级父类中方法

1.克隆clone

protected  Object clone()  创建并返回此对象的一个副本。

为什么需要克隆对象?直接new不行吗?

克隆的对象可能包含了一些已经修改过的属性,new出来的对象属性,需要初始化.当需要一个新的对象来保存当前对象的状态,需要使用clone方法.

如果把对象的临时属性一个一个的值赋值给新new出来的对象,可以吗?可以的,不过比较麻烦.

我们常见的object obj = new Object();   Object b;   b=a;这种形式的代码复制的是引用地址,及栈中的地址,a和b都指向了同一个对象.

而通过clone方法得到的对象跟原来的对象是同时存在的两个对象.

1.1.实现clone的步骤

1.1.1需要复制的类实现Clonenable接口,实现clone()方法

例如:

父类Animal

/**
 * 父类
 */
public class Animal {
	int a ;
	static int b;
	public Animal(int a) {
		super();
		this.a = a;
		System.out.println("animal有参数的构造器");
	}
	{
		System.out.println("animal中的代码块");
	}
	static {
		System.out.println("adnimal中的静态代码块");
	}
	public static void speak() {
		System.out.println("animal中的speak()静态方法");
	}
	public void run() {
		System.out.println("animal中的run()方法");
	}
	public Animal() {
		System.out.println("animal中的无参数构造器");
	}
	
}

子类cat

/**
 * 子类cat
 * @author yh
 *
 */
public class Cat extends Animal implements Cloneable {
	int c ;
	{
		System.out.println("Cat中的代码块");
	}
	static {
		System.out.println("Cat中的静态代码块");
	}
	public Cat() {
		System.out.println("Cat中的无参构造器");
	}
	public Cat(int a, int c) {
		super(a);
		this.c = c;
		System.out.println("cat中的有参构造器");
	}
	@Override
	protected Object clone() throws CloneNotSupportedException {
		return super.clone();
	}
}

子类cat是主要克隆的类,已经实现了clonenable接口,重写了clone()方法

测试类Test

/*
 * 测试类
 */
public class Test {
	public static void main(String[] args) throws CloneNotSupportedException {
		Cat cat = new Cat();
		cat.speak();
		cat.run();
		Cat cats = (Cat) cat.clone();
		System.out.println(cat == cats);
	}
}

2.equals

public boolean equals(Object obj)

所有继承于object的类,都会有该方法,底层实现如下

 public boolean equals(Object obj) {
        return (this == obj);
    }

在object类中,equals方法比较的是对象的引用是否相等,是否指向同一个对象.








































猜你喜欢

转载自blog.csdn.net/springyh/article/details/80988525