1.debug调试
例6.4
源代码
开始调试
总结:
(1)为子类对象分配内存空间,对域变量进行默认初始化
(2)绑定构造方法,将new对象中的参数传递给构造方法中的形式参数
(3)子类在自己相应的含参构造方法中通过super关键字来调用相应的父类含参构造方法,父类再通过this调用自己相应的含参构造方法
(3)调用到父类最后一个构造方法时,通过this关键字给父类变量赋值并传回到上一个调用,直至所有形式参数的值都被赋给父类变量并传回子类构造方法中,初始化子类变量,完成子类构造方法中的语句
(4)完成一个子类对象的初始化,开始进行下一个子类对象的初始化
例6.6
源代码
开始调试
总结:其他与例6.4类似,但当子类没有显式调用父类构造方法时,则系统会在调用子类构造方法的同时,默认调用父类无参构造方法
2.两个对象之间互发消息
通过使用一个对象的引用来调用另一个对象的数据成员或成员方法,将两个对象联系在一起,实现互发消息
3.继承与组合
组合:在新类中简单地创建原有类的对象
继承:创建新类并将其视为现有类的一个类型
(1)区别
①组合是整体与部分(has a)的关系,继承是父子(is a)的关系。
②组合是松耦合,继承是紧耦合。
③继承可以实现多态,即父类变量引用子类对象,组合不可以。
(2)适用场景
在各部分关系不是特别紧密、只需要将它们组合在一起的时候采用组合,例如组装一个房子,需要new floor()、new wall()、new stair()等;在各子类有差异,但都需要继承父类的功能时采用继承,例如Rectangle类、Circle类都需要继承Shape类的数据成员与成员方法。总的来说,组合的运用更加广泛、安全,采用继承容易出错。
4.多态
(1)含义:同一操作作用于不同对象,可以有不同的解释,产生不同的执行结果。主要有两种表现方式:覆盖和重载。
(2)作用:降低类之间的耦合关系,大大提高了程序的简洁性与可拓展性
5.例6.8改写为接口
6.instanceof的使用场景
用来判断对象是否为特定类的实例。
以 a instanceof A 为例,若a是类A的对象引用,结果为true;若a不是类A的对象引用,结果为false。