1.如果语义在每个子类中有所改变,就使用getClass检测,如果所有的子类都拥有统一的语义
就使用getClass检测.
什么叫做语义所有改变和有统一的语义.
2.什么叫基本类型域.
1.意思是说比较的两个子类是否有继承关系 例如A extends B 那么A和B有统一的语义B
2.基本类型域是指String ,long,int,class,数组,集合等等
1.如果语义在每个子类中有所改变,就使用getClass检测,如果所有的子类都拥有统一的语义
就使用instanceof检测.
什么叫做语义所有改变和有统一的语义.
举个例子:
B extends A
C extends A
B,C的equals方法不同。
public class A {
private int a;
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof A))
return false;
if(a != ((A)o).a) {
return false;
}
return true;
}
}
public class B extends A {
private int b;
public B(int para) {
b = para;
}
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof A)) //此处的校验过于宽松会导致后续的类型转换报错
return false;
if(b != ((B)o).b) { // 如果传入的实例是C的对象,此处会抛出异常
return false;
}
return true;
}
}
改为getClass判断才行:
public boolean equals(Object o) {
if (o == this)
return true;
if (!(getClass() != o.getClass()) //如果传入C的实例对象,此处就会返回false,达到正常比对的目的
return false;
if(b != ((B)o).b) {
return false;
}
return true;
}
2.什么叫基本类型域.
基本类型:指的是像int,float等基本的数据类型,可以直接用==来判断是否相等;
基本类型域:就是那些类型为基本类型的成员变量
还有一个问题就是我在主函数中实例其他类的对象吗,我一直觉得很奇怪。