[Core Java]C6 Interface

Interface 特性

接口不允许有Instance Field和Static Methods,所有方法自动为public,所有field自动为public static final

Interface引用可以指向实现它的类的对象

Comparable x = new Employee();

可用Instanceof判断一个对象的所属类是否实现了该接口

if(x instanceof Comparable)

Interface和AbstractClass

1.继承:后者当中可以存在函数的实现,前者完全就是一个虚方法的集合

继承一个抽象类后可以实现一部分方法,继续当抽象类,实现一个接口必须实现它的所有方法

2.实例化和field:两者都不可以实例化,但后者可以拥有它的InstanceField和StaticField,前者的Field自动为public static final的类常量

3.method:两者都不可以声明或实现static方法,但是后者可以包括除private以外的方法,前者自动为public方法

Clonable接口与Clone

Clone是Object类中的protected方法,在不同包的其它类中不可以使用

 protected native Object clone() throws CloneNotSupportedException;

如果该类没有实现Clonable接口则抛出异常,Clonable作为一个标签接口,代表该类已经准备好在其他类中进行Clone()了

该代码会报错The method clone() from the type Object is not visible,因为BridgeMeExp中没有重写Clone()方法
,并将它改为public。所以该方法在其他类不可用

public class InterfaceExp implements Cloneable,Comparable<InterfaceExp> {

	private String TestName;
	int num;
	BridgeMeExp exp;
	
	
	public InterfaceExp(String testName, int num,BridgeMeExp exp) {
		super();
		TestName = testName;
		this.num = num;
		this.exp = (BridgeMeExp)exp.clone();//compile time error
	}

 

深拷贝与浅拷贝

浅拷贝的典型例子就是引用间的赋值

Employee original = new Employee("John Public", 50000);
Employee copy = original;
copy.raiseSalary(10); // oops--also changed original

Employee copy = original.clone();
copy.raiseSalary(10); // OK--original unchanged

深拷贝则要调用实现Cloneale类的clone()函数

Clone函数的实现

对不可变类的引用不用更改,多个引用指向同一个不可变对象也问题不大

class Employee implements Cloneable
{
 public Employee clone() throws CloneNotSupportedException { 
// call Object.clone() 
    Employee cloned = (Employee) super.clone();
 // clone mutable fields 
    cloned.hireDay = (Date) hireDay.clone();
    return cloned; 
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值