第二十一天
了解了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)深层克隆:当类存在聚合关系时,克隆就必须考虑对象的克隆,可以复制引用类型的字段。