Java语言基础-面向对象(5)

多态性

向上转型:多态 

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

何为多态性:

对象的多态性:父类的引用指向子类的对象(或子类的对象付给父类的引用)

举例:

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

有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法

编译看左边,运行看右边

多态使用的前提

类的继承、方法的重写

举例

多态性使用的注意点

对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)

向下转型

为什么使用向下转型:

有了对象的多态性以后,内存实际上是加载了子类特有的属性和方法,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用

如何使用向下转型

使用强制类型转换符:()

使用时的注意点

使用强转时可能会出现ClassCastException异常

为了避免出现ClassCastException异常,我们通常在向下转型时会先进行instanceof的判断,返回结果为true,进行向下转型,返回为false,不进行向下转型

instanceof的使用:

判断对象a是否是类A的实例,如果是,返回true;如果不是,返回false

如果a instanceof A返回true,则a instanceof B也返回true(类B是类A的父类)

要求a所属的类于类A必须是父类和子类关系,否则编译错误

Object类及内部方法

Object类是所有Java类的根父类

如果在类的声明中未使用exetnds关键字指明其父类,则默认父类未java.lang.Object类

Object类中的功能(属性、方法)具通用性

属性:无

方法:equals()   /toString() /getClass() /hashCode() /clone()

        finalize()  /wait() /notufy()   /notifyAll()   

Object类只声明了一个空参的构造器

equals()的使用方法

1、是一个方法,而非运算符

2、只能适用于引用数据类型

3、Object类中equals()的定义:

Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否指向同一个实体对象

4、像String、Data、File、包装类都重写了Object类中的equals()方法。重写后,比较的不是两个引用的地址是否相同,而是比较两个对象的实体内容是否相同

5、通常情况下,我们自定义的类如果使用equals()的话,也是通常比较两个对象的实体内容是否相同,那么我们就需要对Object类中的equals()进行重写。

重写原则:比较两个对象的实体内容是否相同

如何重写equals()方法

开发中自动生成

toString()方法

当我们输出一个对象的引用时,实际上就是调用当前对象的toString()

Object类中toString()的定义:

像String、Date、File、包装类等都重写了Object类中toString()的方法使得再调用对象的toString()时,返回实体内容信息

自定义类也可以重写toSting()方法,当调用此方法时,返回对象的实体内容信息

重写toString()

 

包装类的使用

为什么要有包装类:基本数据类型的变量具有类的特征,引入包装类

基本数据类型与对应的包装类:

需要掌握的类型间的转换:(基本数据类型、包装类、String)

基本数据类型<----->包装类:自动装箱、自动拆箱

基本数据类型、包装类----->String:调用String重载的valueOf(Xxx xxx)

String----->

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值