第二十一天

了解了Java中的继承,和对象中的克隆

明天学习Java的继承方法

继承是Java面向对象的一种表现,利用继承可以先创建公共属性的父类,然后根据各子类的不同特性创建其各个不同属性。

子类继承父类的属性和方法,并根据需要增加它为自己的新的属性和方法。由此继承而得到的类为子类,被继承的类为父类,也叫超类,Java不支持多继承(子类只能有一个父类)

一、Object类及其方法

Java中所有的类都默认继承Object类,Object是Java所有类的父类

定义如下:

public class Object

Object是类层次结构的根类,每个类都是用Object作为超类,所有对象(包括数组)都实现这个类的方法。

 

二、对象中的克隆
Java克隆(Clone)是Java语言的特征之一,可能少见,但是会更方便,更有效率。

1.克隆的限制

(1)被克隆的类必须自己实现Cloneable接口,以指示Object.clone()方法可以合法的对该实例进行按字段复制。Cloneable接口实际上是个标识接口,没有任何接口方法。

(2)实现Cloneable接口的类应该使用公共方法重写Object.clone(它是受保护的)。某个对象实现类此接口就克隆它是不可能的。

(3)在java.lang.Object类中克隆方法是这么定义的

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

2.浅层克隆和深层克隆

Java克隆主要分为浅层克隆和深层克隆

(1)浅层克隆:主要是复制对象的值。

public class CloneDemo {
    public static void main(String[] args)throws CloneNotSupportedException{
        Person p=new Person("任我行",35);
        Person p2=(Person)p.Clone;
        System.out.println("克隆前:"+p.getName()+","+p.getAge());
        System.out.println("克隆后:"+p2.getName()+","+p2.getAge());
        if(p==p2)
            System.out.println("p和p2的地址相等");
        else
            System.out.print("p和p2的地址不相等!!");
    
    }
    
}
class Person implements Cloneable{
    private String name;
    private int age;
    public Person(String name,int age) {
        this.name=name;
        this.age=age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public void setName(String name) {
        this.name=name;
    }
    public void setAge(int age) {
        this.age=age;
    }
    @override
    protected Object Clone throw CloneNotSupportedException{
        return super.clone();
    }
}

 

(2)深层克隆:当类存在聚合关系时,克隆就必须考虑对象的克隆,可以复制引用类型的字段。

 

posted @ 2020-07-26 19:32  yasai  阅读(78)  评论(0编辑  收藏  举报