一、面向对象的特性(正常为三个,如果说4个还有抽象)
1.继承:继承是从已有类得到继承信息创建新类的过程。
2.封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口(本质构建一个自治封闭的对象)。
3.多态:指允许不同子类型的对象对同一消息做出不同的响应。
4.抽象:抽象是将一类对象的共同特征总结出构造类的过程(数据抽象和行为抽象)
二、访问权限修饰符public、private、protected、默认时区别
三、如何理解clone对象(了解)
因为地址值(索引)导致相对不同对象修改时对同一对象进行了修改。
在实际编程过程中,我们常常要遇到这种情况:有一个对象 A,在某一时刻 A 中已经包含了一些有效值,此时可 能会需要一个和 A 完全相同新对象 B,并且此后对 B 任何改动都不会影响到 A 中的值,也就是说,A 与 B 是两个独立 的对象,但 B 的初始值是由 A 对象确定的。在 Java 语言中,用简单的赋值语句是不能满足这种需求的。要满足这种需 求虽然有很多途径,但实现 clone()方法是其中最简单,也是最高效的手段。
实现Cloneable重写clone方法,重新创建新对象,将原有对象值复制一份到新对象中,再返回新的对象(这里是浅克隆,引用对象,不会创建新对象,需要手动克隆引用对象)
还有一种方式是深克隆,将对象序列化和反序列化实现
/**
* 深克隆
*
* @author Tony_gmj
*
*/
public class CloneInDeep {
private CloneInDeep() {
throw new AssertionError();
}
@SuppressWarnings("unchecked")
public static <T extends Serializable> T clone(T obj) throws Exception {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bout);
oos.writeObject(obj);
ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bin);
return (T) ois.readObject();
// 说明:调用 ByteArrayInputStream或 ByteArrayOutputStream对象的 close方法没有任何意义
// 这两个基于内存的流只要垃圾回收器清理对象就能够释放资源,这一点不同于对外部资源(如文件流)的释放
}
}
(我自己第一次使用深克隆是要对同一个集合排正逆序,取5个,对同一个集合操作会出错,就复制了一个集合,再处理)