面向对象三大特征之三:多态
多态的概述,多态的形式
什么是多态?
同类型的对象,执行同一个行为,会表现出不同的行为特征。
多态的常见形式
多态中成员访问特点
方法调用:编译看左边,运行看右边。
变量调用:编译看左边,运行也看左边。(
多态侧重行为多态
)
多态的前提
有继承/实现关系;有父类引用指向子类对象;有方法重写。
面向对象三大特征之三:多态
多态的优势
面向对象三大特征之三:多态
多态下引用数据类型的类型转换
总结:
1.
引用数据类型的类型转换,有几种方式?
l
动类型转换、强制类型转换。
2.
强制类型转换能解决什么问题?强制类型转换需要注意什么。
可以转换成真正的子类类型,从而调用子类独有功能。
有继承关系
/
实现的
2
个类型就可以进行强制转换,编译无问题。
运行时,如果发现强制转换后的类型不是对象真实类型则报错。
类型转换异常:
ClassCastException
内部类
内部类概述
内部类的分类
静态内部类
[
了解
]
成员内部类(非静态内部类)
[
了解
]
局部内部类
[
了解
]
匿名内部类(重点)
内部类
内部类之一:静态内部类[了解]
静态内部类的访问拓展:
1、静态内部类中是否可以直接访问外部类的静态成员?
可以,外部类的静态成员只有一份可以被共享访问。
2、静态内部类中是否可以直接访问外部类的实例成员?
不可以的,外部类的实例成员必须用外部类对象访问。
总结:
1.
静态内部类的使用场景、特点、访问总结。
如果一个类中包含了一个完整的成分,如汽车类中的发动机类。
特点、使用与普通类是一样的,类有的成分它都有,只是位置在别人里面而已。
可以直接访问外部类的静态成员,不能直接访问外部类的实例成员。
注意:开发中实际上用的还是比较少。
内部类
内部类之二:成员内部类[了解]
成员内部类的访问拓展:
1、成员内部类中是否可以直接访问外部类的静态成员?
可以,外部类的静态成员只有一份可以被共享访问。
2、成员内部类的实例方法中是否可以直接访问外部类的实例成员?
可以的,因为必须先有外部类对象,才能有成员内部类对象,所以可以直接访问外部类对象的实例成员。
总结:
1.
成员内部类是什么样的、有什么特点?
无
static
修饰,
属于外部类的对象。
可以直接访问外部类的静态成员,实例方法中可以直接访问外部类的实例成员。
2.
成员内部类如何创建对象?
外部类名.内部类名 对象名 =
new
外部类
构造器
.
new
内部类构造器
()
;
内部类
内部类之三:局部内部类
[
了解
]
局部内部类 (鸡肋语法,了解即可)
局部内部类放在方法、代码块、构造器等执行体中。
局部内部类的类文件名为: 外部类$N内部类.class。
内部类
内部类之四:匿名内部类概述[重点]
总结:
内部类
匿名内部类常见使用形式
内部类
匿名内部类真实使用场景演示
常用API
Object
toString方法
总结:
1.
Object
的
toString
方法的作用是什么?
默认是打印当前对象的地址。
让子类重写,以便返回子类对象的内容。
常用
API
Object
toString方法
equals方法
总结:
1.
Object
的
equals
方法的作用是什么?
默认是与另一个对象比较地址是否一样
让子类重写,以便比较
2
个子类对象的内容是否相同。
常用API
Objects
1.
对象进行内容比较的时候建议使用什么?为什么?
建议使用
Objects
提供的
equals
方法。
比较的结果是一样的,但是更安全。
常用API
StringBuilder
总结:
1、为什么拼接、反转字符串建议使用StringBuilder?
String
:内容是不可变的、拼接字符串性能差。
StringBuilder
:内容是可变的、拼接字符串性能好、代码优雅。
定义字符串使用
String
拼接、修改等操作字符串使用
StringBuilder
常用API
Math
常用API
System
常用API
BigDecimal
总结:
1.
BigDecimal
的作用是什么?
解决浮点型运算精度失真问题。
2.
BigDecimal
的对象如何获取?
BigDecimal b1
=
BigDecimal
.
valueOf
(
0.1
);