Clonable接口和深拷贝

java中内置了一些很有用的接口,Clonable就是其中之一

Object类中存在一个clone方法,调用这个方法可以创建一个对象的“拷贝”,但是想要合法调用clone方法,必须要先实现Clonable接口,否则就会抛出CloneNotSupportedException异常。

Object类是所有对象的直接或间接的父类

该类具备所有对象都具备的功能

Object类中已经提供了对对象是否相同的比较方法

标记接口

cloneable函数本身就是一个标记接口,意思是实现了它,就可以使用克隆方法了,我们在类当中重写clone函数,其实是重写的Object类当中的clone()函数,这样我们在子类当中才能使用clone函数
 

class Money
{
    public double money;
}
class Student implements Cloneable
{
    //cloneable接口什么内容都没有
    //作用是什么?
    //这个接口是标记接口,实现了该接口,证明当前类是可以被克隆的
    public int age;
    public Money  m = new Money();//成员变量
    public Student(int age)
    {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                '}';
    }

    protected Object clone() throws  CloneNotSupportedException{
        return super.clone();
    }

}
public class Test {



    public static void main(String[] args) throws CloneNotSupportedException {
    Student student1 = new Student(10);
    student1.m.money = 19.9;
    Student student2 = (Student) student1.clone();
    }


}

问题:   Student student2 = (Student) student1.clone();为什么还得进行强制转型呢?

这是因为clone()函数的返回值是Object类型的,所以需要强制转型为Student。

Object类

默认是所有类的父类,默认会继承Object类,即所有类的对象都可以使用Object的引用进行接受。

范例:使用Object接受所有类的对象

问题:当类中的私有变量设置完,并进行初始化以后为什么还需要getter和setter,原因是什么?

         getter 和 setter 最主要的目的是控制变量的访问权限,实现封装,外部类 无法直接访问或修改 这些变量,必须通过 gettersetter 进行访问。

匿名内部类

这个匿名内部类,直接被实例化了,但是没有名字,也没办法再次调用

重载和重写的区别

同一个类之中,方法名称相同,参数不同,我们称之为重载;重写发生在继承当中,当子类继承了父类之后,将这个函数复制过去之后,内容进行了更改,我们可以将之称为重写。


 

点击阅读全文
Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐