目录
多态机制
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动
态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变
量的类型中定义的方法
有参构造方法和无参构造方法
编写类时,默认有无参构造方法。
添加有参或无参构造方法后,默认的无参构造会失效---------------->so 仅添加有参构造方法后,再调用无参构造方法编译报错。
复制对象和复制引用
Person p = new Person(11);
Person p1 = p;------------------------->复制引用,地址相同
Person p2 = (Person)p.clone();------------------>复制对象,地址不同
浅拷贝和深拷贝
对象拷贝时,成员变量是引用数据类型如String时:
仅拷贝引用值--------->浅拷贝-------------------->so 改变新拷贝对象的值时,原先的对象也会改变。
创建新的对象,将新的对象的引用值赋给新拷贝的对象------>深拷贝
看图可知:clone复制对象后,新对象的其他实体类对象的地址和原对象中该实体类对象的地址相同--------->so 浅拷贝
-------------> 要实现深拷贝时,该对象实现clone方法,该对象引用的其他对象也要实现clone方法。
代码即:
//1.在被引用的对象中也添加clone方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
//2.在原对象中添加clone方法时,将被引用对象也clone一次
//Person指原对象,Addr是被引用的实体对象
@Override
protected Object clone() throws CloneNotSupportedException {
Person newPerson = (Person) super.clone();
newPerson.addr = (Addr)addr.clone();
return newPerson;
}
代码修改后的结果为:
&和&&
&:按位与、逻辑与。------------>执行所有判断条件。
&&:短路与。------------> a&&b , if a == false , then 不进行b的运算。
注:I 和 II 类似。
break和continue
break:跳出循环。continue:执行下一轮循环。
equals和hashcode
两个对象的equals相等则hashcode肯定相等,hashcode相等equals不一定相等。
equals方法满足:自反性、对称性、传递性和一致性。
重写equals时要重写hashCode-具体见 https://blog.csdn.net/u012557538/article/details/89861552
equals和==
前者是方法后者是运算符
equals():比较内容是否相等
equals是先比较地址值,不相等再逐个比较字符
==:基本数据类型比较数值是都相等,引用数据类型比较对象的地址值是否相等
String类
是final类,不可被继承,不可被修改--------->内存开销