(6)面向对象(下)

实验:利用IDE的debug功能给例6.5的new语句设置断点,使用单步调试(step into/step over)跟踪子类对象实例化(初始化)的执行顺序,并总结该过程。

子类对象实例化的执行顺序:

 

 

 

总结过程:为子类对象分配内存空间,对成员变量进行默认的初始化;绑定子类构造方法,将new中的参数传递给构造方法的形式参数;显式或隐式调用super语句,对从父类继承来的实例变量进行初始化;按定义顺序执行实例变量实例化操作;执行子类构造方法的剩余代码。

如何实现两个对象之间互发消息,请举例说明。

消息的实质就是引用向对象发出的服务请求,是数据成员和成员方法的调用。实现两个对象之间互发消息,其实就是通过使用一个对象的引用来调用另一个对象的数据成员或成员方法,这样两个对象被联系到了一起,实现了消息的发送。举例如下:

谈谈组合与继承的区别以及两者的使用场景(即什么时候宜用组合?什么时候宜用继承?)。

组合和继承的区别:继承是子类继承父类,父类的所有属性和方法都可以被子类访问和调用。组合是指将已存在的类型作为一个新建类的成员变量类型,两个类之间无上下级关系。两者使用场景:
当只需要使用另外一个类的方法时使用组合。但是如果需要使用另外一个类的作用时但不想被其他的类访问用继承。

Java中的运行时多态的含义是什么?有什么作用?请举例说明。

Java的运行时多态的含义:也叫作动态绑定,一般是指在执行期间(非编译期间)判断引用对象的实际类型,根据实际类型判断并调用相应的属性和方法。作用:主要用于继承父类和实现接口时,父类引用指向子类对象。举例:

使用接口改写例6.8中的程序。

自定义一个类,覆写equals方法,以满足自身业务需求。

举例说明运算符instanceof的使用场景。

当父类引用子类实例时,会发生向上转型,此时如要调用子类的方法时,需要强制向下转型,如果不对引用类型进行判断,则可能会导致异常出现。

谈谈抽象类与接口的异同以及两者的使用场景。

抽象类与接口的共同点:二者都有抽象方法,都不能实例化,都有自己的声明,并能引用具体子类或实现类对象。不同点:抽象类可以有域变量,接口不能有域变量,只能是静态常量;抽象类可以有具体方法,而且具体方法可以调用抽象方法,接口如果有方法,则全部都是抽象方法;抽象类必须有子类继承,接口必须有实现类实现;抽象类扩展性弱,接口扩展性强。两者的使用场景:抽象类:一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用抽象类定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖;某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。抽象类的中介作用可以很好地满足这一点;规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能。接口:类与类之前需要特定的接口进行协调,而不在乎其如何实现;作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识;需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系;需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值