栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java --接口

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java --接口

接口:如果某个类遵从某个接口,那么它就要履行相应的服务,这里后半句的意思就是它必须重写所有的方法。注意接口和纯虚类一样绝对不可以被实例化,不能有实例域,但可以有常量,里面的方法自动设置成public,常量是public static final。

为什么要多此一举去弄一个接口,而不是利用之前的纯虚类呢,那是因为java在类中只能单继承,而接口当中可以多继承,所以你会看到implents多个接口。

类优先规则:在你同时继承类和实现接口的时候,如果它们两当中都定义了同一个方法,并且在接口中是默认方法,那么基于类优先规则,接口中的方法会被忽略。

深拷贝与浅拷贝:

问题引入:为一个包含对象引用的变量建立副本时会发生什么?我们知道对象变量都是堆中某个对象实例的引用,可以粗略地理解为指针。下面看一个代码:

Employee original = new Employee("John Public", 50000);

Employee copy = original;

copy.raiseSalary(10);

我们知道copy去执行完这个方法后原来original这个变量引用的对象所包含的salary值也发生了变化。

那么怎么实现两个对象变量的引用相互隔离呢?我们可以使用clone方法来克隆!

Employee copy = original.clone();

copy.raiseSalary(10);

这样一来original这个变量引用的对象的salary值不会改变。你以为这就完了吗?让我们考虑更加复杂的情况,如果实例域当中的是对象变量呢?那么你复制过来的依然是原来的引用,依然实现不了隔离!

 可以看出,hireDay引用的还是同一个对象,没有实现隔离。通常子对象都是可变的, 必须重新定义 clone 方法来建立一个深拷贝, 同时克隆所有子对象。这里说的深拷贝就是把hireDay和name重新拷贝一份在堆上,而不只是拷贝一份引用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号