2013-02-01

关于超链接的妙用:

<a href="javascript:void(0)" onclick="xxxxxxxx()"/> 这种方法的好处是页面上看不到你实际调用的方法或者跳转的页面
关于equals()重写

equals()约定

不需要改写默认equals()方法的情况

           1         

一个类的每个实例本质上是唯一的,本来就符合默认equals()的含义,根据是否引用同一对象来判断。

如:Thread类

2

不需要提供“逻辑相等”的测试功能。

如:Random类,

3

超类已经改写了equals()方法,此方法子类也适用。

如:AbstractList和ArrayList

4

一个类私有的,其equals()方法永远不会被调用(若为了防止会用到最好也要检查是否适合重写)

     需要改写默认equals()方法的情况,

1

一个类有自己的“逻辑相等”,而且超类也没有改写equals()方法

2

通常这适用于“值”类,如:Integer、JavaBean等。

改写equals()方法的约定

1

非空性、自反性、传递性、一致性、对称性

public boolean equals(Object obj) {

    if(obj==this)

        return true;

if(!(obj instanceof ThisClass))

        return true;

ThisClass to=(ThisClass)obj;

//对每个关键域进行比较,注意引用类型的Null值,也要考虑到

}

"instanceof"操作符的使用非常简单,它用两个参数来完成其功能。
第一个参数是你想要检查的对象,第二个参数是类名(事实上是一个接口名),用于确定是否这个对象是相应类的一个实例。它的基本语法如下:

if (object instanceof class name){//继承关系
 //
}

 

2

改写了equals()后也要相应的改写hashcode()

3

对于以下情况要特别考虑到:

当扩展一个可实例化的类的同时,既要增加新的特征,同时还要保留equals约定,要完全实现上面的约定是做不到的

优化:将扩展改为复合,父类作为子类的一个属性,子类的equals中父类型属性用父类的equals方法比较。

并在子类中提供一个方法返回其父类视图,以便需要把它当做父类时能用的到。

 

注意:一个抽象类的子类中增加新的特性,不会违反equals约定。因为抽象类不可能创建实例。


posted @ 2013-02-01 12:23  宋建国  阅读(119)  评论(0)    收藏  举报