首页 > 代码库 > java学习笔记(Core Java) 6接口与内部类

java学习笔记(Core Java) 6接口与内部类

接口(实现C++的多继承,同时避免了虚继承)
深拷贝与浅拷贝
内部类
代理

一、接口与泛型接口:提供一组行为规范
public interface Comparable<T>
{
int compareTo(T other)
}
...
int conpareTo<Employee other> //指定T

接口中所有的方法自动属于public
所有的域自动为public staic
接口中的域自动声明为 public static final

继承接口的关键字:implements
1.接口提供方法必须在子类实现
2.接口中的方法没有方法体
3.接口中不允许包含实例域或静态方法,但可以包含常量。接口中的域自动声明为 public static final
4.接口不允许创建实例,但可以声明接口变量 Comparable x//也是正确的
5.接口类变量必须实现引用接口的类对象 //基类指针指向子类对象
可以使用instanceof判断一个对象是否实现特定接口

//////////////////////////////
java.lang.Comparable<T>

int comparaTo(T other)//大于 正 ,等于 0, 小于负

java.util.Arrays
static void sort(Object[] a) //要求数组中的参数都必须实现了Comparable接口,并且是可以比较的

java.lang.Integer
static in compare(int x, int y)
//////////////////////////////

二、对象拷贝与克隆clone
如果对变量进行简单的=,则两个变量引用同一个对象,所以更改一个必将引起另一个改变。如果要创建两个一样的新对象,就需要clone方法

深拷贝与浅拷贝:
clone是超类object中的protect方法,它并不清楚每个类的具体信息,只是对每个域进行相应的拷贝。如果类中一旦包含其他对象的引用的变量,那么经拷贝后的这两个变量将指向了同一个被引用的对象,即两个对象共享一个子对象,这并没有去clone一个完全独立的新对象,也就是,默认的clone是浅拷贝,没有克隆包含在对象中的对象。

深拷贝需要重新定义clone方法(默认的为object中,且访问级别为protect)
需要实现Clloneable接口,并将clone重新定义为public

实现深拷贝,必须克隆所有可变域

⑴clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足:
①对任何的对象x,都有x.clone() !=x//克隆对象与原对象不是同一个对象
②对任何的对象x,都有x.clone().getClass()= =x.getClass()//克隆对象与原对象的类型一样
③如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立。

⑵Java中对象的克隆

①为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。
②在派生类中覆盖基类的clone()方法,并声明为public。
③在派生类的clone()方法中,调用super.clone()。
④在派生类中实现Cloneable接口。

举例:
public class Employee implements Cloneable
{
private String name;
private Date hireDay; //引用对象
...
public Employess clone() throw CloneNotSupportException //显示告诉编译器,如果类没有实现Cloneable接口,将抛出异常
{
Employee clone = (Employee)super.clone;//Object类clone方法将会产生新对象;

clone.hireDay = (Date)hireDay.clone();//创建子对象

return clone;
}
}

///////////////////////////////
所有数组类型均包含一个clone方法并且是public,可以创建两个数据一样且独立的数组
//////////////////////////////

三、接口与回调函数 java回调与C#委托,函数指针,其实java和他俩还是有很大不同的
//待保留

java学习笔记(Core Java) 6接口与内部类