第七章: 面向对象编程(中级)
9.object类
1.equals方法
第二条:true
1.查看jdk源码
2.子类重写equals方法
String中equals方法
Object中equals方法
Integer中的equals方法
New就是创建一个对象,下面两个integer型对象的地址不一样
上面判断的==,两边的地址不一样
下面的equals变为判断值是否相等
3.equals课堂练习(重写equals)
person1.equals(person2)中的equals方法是从object中继承而来的,而object中equals方法默认就是比较对象地址是否相同,所以为FALSE
我们可以重写equals方法进行比较
这里的this代表的就是当前对象person1,obj就是指person2
上面这一行的this指的就是person1,p指的就是person2
p1.equals.(p2)还是没有重写equals方法,属于默认的object类之间的比较,所以为假
S1.equals.(S2)已经重写了equals方法为string类型比较,所以为真
最后一个类型不同,无法进行比较,编译出错
2.hashCode方法
3.toString方法
全类名就是包名+类名
下面的monster.toString()因为没有重写toString()方法,所以使用的object中的toString()方法,本质就是object.toString()
下面我们对toString()方法进行重写
4.Finalize
下面这个是默认的finalize方法,就是调用父类的即object的方法
现在我们重写finalize方法,但此时我们发现重写的finalize()方法中的输出语句并没有输出,因为虽然bwm = null,但bwm对象没有立刻变为垃圾被销毁,而是需要调用垃圾回收机制
此时我们使用System.gc()方法主动调用垃圾回收器,因为调用的时候,程序没有停在这边等待,所以先执行了下面那一句话
10.断点调试(debug)
1.断点调试案例1(变量的变化情况)
点击左键,出现一个红色的圆圈,这个就是断点
逐行执行
进入到方法体内
强制进入到方法体内
跳出方法
直接执行到下一个断点
结束debug过程(红色小方框)
2.断点调试案例2(数组越界的异常)
3.断点调试案例3(如何追源代码)
4.断点调试案例4(直接执行到下一个断点)
5.断点调试课后练习
第一题
第一步(加载person类信息)
第二步:默认初始化和显示初始化是看不见的,进入到构造器
name默认值先是null,之后为jack
age默认值为0,之后变为20
下面看一下system.out.println(jack)有没有调用我们的toString()方法
最后,整个过程结束
第二题
本来按照运行为B,应该到B中sum()方法,但B中没有sum()方法,所以按照继承继承机制进入了A中的sum()方法。
接着因为运行类型为B,根据动态绑定机制,我们到了B类中getI()方法
11.项目-零钱通
1.零钱通介绍
2.零钱通菜单
3.零钱通明细
4.零钱通收益
5.零钱通消费
6.零钱通退出确认
或者
7.零钱通金钱校验
8.零钱通OOP版
唯一要改变的地方就是要将下面的break改成return,break是用在switch中的
12.本章练习
1.本章练习1
因为这边重写过toString()方法,所以输出的结果如下所示
2.本章练习2
3.本章练习3
Teacher类
Professor类,其他的子类就不写了
Main方法
4.本章练习4
父类Employee
子类Manage
子类worker
Main方法
5.本章练习5
父类Employee
子类worker
子类pleasant
子类teacher
子类scientist
6.本章作业6
第一个super:由于age是私有的,所以无法访问
第一个this;先到本类中进行查找,如果没有,再到父类中进行查找
7.本章练习7
注意,下面两个对象没有给他一个对象引用,就是匿名对象
new.Demo().test()中
先是new.Demo(),执行Demo类中的
然后执行super(),即Test类中的(注意:这里的super()不写出来,也是默认在的)
直接执行new.Demo().后面的test()
首先输出super.name,结果为Rose
接着输出this.name,结果为Jack
new.Demo(“john”).test()同理
8.本章练习8
BankAccount类
CheckingAccoount类
SavingAccount类
9.本章练习9
10.本章作业10
11.本章练习11
注意动态绑定
12.本章练习12
13.本章练习13
子类Student类
子类teacher类
父类Person类
Mian类
上面的persons[i].toString(),的编译类型是Person,但调用toString()时,会自动绑定它的运行类型
14.本章练习14
15.本章练习15
下面AAA b1 = obj;表示obj与b1指向同一个对象
Obj = b1;让obj重新指向b1,b1原先是指向bbb的
运行类型可以改变,但编译类型无法改变,一直就是AAA