
【百日精通JAVA | 第五篇】类的补充
cloneable函数本身就是一个标记接口,意思是实现了它,就可以使用克隆方法了,我们在类当中重写clone函数,其实是重写的Object类当中的clone()函数,这样我们在子类当中才能使用clone函数。重写发生在继承当中,当子类继承了父类之后,将这个函数复制过去之后,内容进行了更改,我们可以将之称为重写。默认是所有类的父类,默认会继承Object类,即所有类的对象都可以使用Object的引用
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 最主要的目的是控制变量的访问权限,实现封装,外部类 无法直接访问或修改 这些变量,必须通过 getter
和 setter
进行访问。
匿名内部类
这个匿名内部类,直接被实例化了,但是没有名字,也没办法再次调用
重载和重写的区别
同一个类之中,方法名称相同,参数不同,我们称之为重载;重写发生在继承当中,当子类继承了父类之后,将这个函数复制过去之后,内容进行了更改,我们可以将之称为重写。

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