面向对象6

一、面向对象特征之三:多态性

1、如何理解多态性?

理解:理解为一个事物的多种形态。

生活举例:

女朋友:我想养一个宠物。 孩子:我想要一个玩具。 老板:张秘书,安排一个技术科的同事,跟我一起下周出差。

2、Java中多态性的体现:

子类对象的多态性:父类的引用指向子类的对象。(或子类的对象赋给父类的引用) 比如:Person p2 = new Man();

3、多态性的应用:

多态性的应用:虚拟方法调用

在多态的场景下,调用方法时

编译时,认为方法是左边声明的父类的类型的方法(即被重写的方法) 执行式,实际执行的是子类重写父类的方法。

简称为:编译看左边,运行看右边。

4、多态性的使用前提:① 要有类的继承关系 ② 要有方法的重写

5、多态的适用性:适用于方法,不适用于属性。

6.1、多态的好处与弊端

6.2 、好处:极大的减少了代码的冗余,不需要定义多个重载的方法。

7、instanceof的使用

    1. 建议在向下转型之前,使用instanceof进行判断,避免出现类型转换异常

    1. 格式: a instanceOf A : 判断对象a是否是类A的实例。

    1. 如果a instanceOf A 返回true,则:

      a instanceOf superA 返回也是true。其中,A 是superA的子类。

二、Object类的概述

1、Object类的说明

明确:java.lang.Object 任何一个Java类(除Object类)都直接或间接的继承于Object类 Object类称为java类的根父类 Object类中声明的结构(属性、方法等)就具有通用性。 Object类中没有声明属性 Object类提供了一个空参的构造器 重点关注:Object类中声明的方法

2、常用方法

重点方法:equals() \ toString() 了解方法:clone() \ finalize() 目前不需要关注:getClass() \ hashCode() \ notify() \ notifyAll() \ wait() \ wait(xx) \ wait(xx,yy)

3、equals()的使用

3.1 、适用性: 任何引用数据类型都可以使用。

3.2 、java.lang.Object类中equals()的定义: public boolean equals(Object obj) { return (this == obj); }

3.3 、子类使用说明:

自定义的类在没有重写Object中equals()方法的情况下,调用的就是Object类中声明的equals(),比较两个对象的引用地址是否相同。(或比较两个对象是否指向了堆空间中的同一个对象实体)

对于像String、File、Date和包装类等,它们都重写了Object类中的equals()方法,用于比较两个对象的实体内容是否相等。

3.4 、开发中使用说明:

实际开发中,针对于自定义的类,常常会判断两个对象是否equals(),而此时主要是判断两个对象的属性值是否相等。 所以:我们要重写Object类的equals()方法。 如何重写: 手动自己实现 调用IDEA自动实现(推荐)

3.5 、高频面试题: 区分 == 和 equals()

==:运算符 ①使用范围:基本数据类型、引用数据类型 ② 基本数据类型:判断数据值是否相等

int i1 = 10; int i2 = 10; sout(i1 == i2);//true

char c1 = 'A'; int i3 = 65; sout(c1 == i3);//true

float f1 = 12.0F; int i4 = 12; sout(f1 == i4);//true

引用数据类型变量:比较两个引用变量的地址值是否相等。(或比较两个引用是否指向同一个对象实体)

equals():方法

使用范围:只能使用在引用数据类型上。 具体使用:对于类来说,重写equals()和不重写equals()的区别。

4、toString()的使用

4.1 、Object类中toString()的定义: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }

4.2、 开发中的使用场景

平时我们在调用System.out.println()打印对象引用变量时,其实就调用了对象的toString()

4.3 、子类使用说明:

自定义的类,在没有重写Object类的toString()的情况下,默认返回的是当前对象的地址值。像String、File、Date或包装类等Object的子类,它们都重写了Object类的toString(),在调用toString()时,返回当前对象的实体内容。

4.4 、开发中使用说明:

习惯上,开发中对于自定义的类在调用toString()时,也希望显示其对象的实体内容,而非地址值。这时候,就需要重写Object 类中的toString().

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值