Java面向对象编程基本技能

学习目标

本讲介绍了三种常见的面向对象编程场景:对象比较、对象组合、对象复制
掌握这三种面向对象编程技巧,是进一步学习更复杂的(比如“设计模式”)编程技巧的基础

对象比较

  • 施加于两个对象变量之上的“==”,实际上是判断这两个对象变量是否引用同一个对象
  • 在实际开发中,我们经常需要比对某两个对象的“内容“比如你已经有一个对象,想在另一个对象集合中找到是否有”内容一样“的对象
  • 这里所说的对象的”内容“,主要指对象的字段值
  • 由于字段值在不同的时刻可能会改变,在某一特定时刻,对象所有字段值的集合,称为对象在这一时刻的”状态
对象比较:Comparable接口
  • JDK中为了能比较对象X和Y的大小,定义了以下接口:
public interface Comparable{
   int compareTo(Object other);
   }

在这里插入图片描述

  • 泛型化的Comparable接口
    引入泛型后,JDK中又增加了一个泛型化的接口,老的版本不推荐使用:
public interface Comparable<T>{
    int compareTo(T other);
    }

在这里插入图片描述

区分==与Equals

  • ==施加于对象类型,是比较两个对象变量是否引用同一对象,如果需要比对对象的“内容(即各字段的值)”,通常是调用对象的equals方法
  • equals方法由Object类所定义,其默认实现如下:
public boolean equals(Object obj){
return (this == obj);
}

在这里插入图片描述

重写equals()的必要性

  • JDK的许多集合类型,比如ArrayList,在查找元素时,会调用元素的equals方法以确定当前元素是不是要找的那个
    在这里插入图片描述

一个容易忽略的问题

  • 重写Object的equals方法,注意其参数必须是Object
  • 另外,为了让对象能放入各种容器中,通常还需要重写hashCode方法

重写equals方法的要求

在这里插入图片描述

一个可以“判等”的类的示例模版

在这里插入图片描述
不理解重写hashCode有啥用?】
在这里插入图片描述
在这里插入图片描述

对象组合

  • 对象组合指的是对象之间的相互包容关系
  • 在面向对象时代:正在运行的程序=对象+对象之间的合作关系
    【研究对象组合的方式在面向对象编程中很有必要】
    在这里插入图片描述

对象组合方式一的实现

class A{
 private class D{
 }
 private D innerDObj=null;
 public A(){
   innerDObj = new D();
   }
 }
  • A 完全包容 D
  • A对象创建时,B对象自动创建;A对象销毁时,D对象也同时销毁

对象组合方式二的实现

在这里插入图片描述
在这里插入图片描述

对象复制

在这里插入图片描述

简单克隆对象

在这里插入图片描述

对象的浅复制

在这里插入图片描述

组合对象的复制问题

对于组合对象,浅复制会带来一些问题。A对象包容一个B对象:
在这里插入图片描述
在这里插入图片描述

浅复制带来的问题

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值