0x0.如何从源码角度分析问题
根据图中点点
- 点击
ArrayList(ctrl+xxx)进入
源码 ctrl+alt+u
查看继承树,梳理下应该从哪里找toString
的重写- [注意] 图中蓝色线是
extends
类 绿色虚线是implements
绿色实线是接口implements
接口 - [注意] extends 都是s 第三人称单数
0x1.toString方法的寻找
toString
方法我已经给找了
在AbstractCollection
类中
==操作==
- 需要把继承图关掉
- 然后再
arraylist
类中按下ctrl+H
右面查看继承关系类表 - 双击进入AbstractCollection类中
图示操作
进入源码不要慌
画虎画皮难画骨
觉得难是因为骨没有摸到,看着一堆英语与方法心里忐忑
Alt+7
查看方法关系结构,左边会跳出来
也可以点击左边的structure
[注意]我们发现左边Structure边上有个7,意思是让你alt+7就能点
好啦,我们在左边找找toString方法有没有把
嗨,找到了哎,棒,倒数第二个
[注意] 也可以在类中ctrl+f
直接搜toString
双击toString,看看源码
0x2 总结(应该懂得)
[本质] 集合的一个个数据放在一个迭代器里面
[目的] 为什么不直接在arraylist里重写 ? 因为写在上有同toString有更广的作用域,减少冗杂
父类引用调用方法时,如果此时方法被子类重写,调用被重写的方法
记住一些快捷键
ArrayList继承关系
Object(万物皆对象) ->Collection ->AbstractCollection ->AbstractList ->ArrayList
0x3 知识补充
理论上讲万物都有object类中的方法
除了基本类型23333
为什么时面相对象编程?
因为我们或近或远都是继承了object类
object对象,我们继承了对象,本质就是一个对象(多态)
所以一直在object范围里去写程序,面向object类编程
你可以继续拓展
集合数据放在迭代器里,迭代器是个啥?本质?
在以后的学习过程中除了领悟面向对象编程外还要慢慢领悟什么时面向接口编程,因为我们以后都是面向接口编程