Java面向对象

一、面向对象的特性(正常为三个,如果说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个,对同一个集合操作会出错,就复制了一个集合,再处理)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值