对于Java核心技术卷里的一些句子提出问题,
问: 什么是通用的域或者方法。
2.抽象方法充当占位的角色,他们的具体实现在子类中。扩展抽象类可以有两种选择。一种是在子类中定义部分抽象方法或者抽象方法也不定义,这样就必须将子类也标记为抽象类;另一种是定义全部的抽象方法,这样一来,子类就不是抽象的了。
问: 我明明可以通过重新覆盖来在子类中实现父类中定义的抽象方法,为什么非要把子类也变成抽象方法。 还有就是什么是定义全部的抽象方法。
问题1:通用的域和方法,域应该指的变量吧,通用方法就是指他所有子类都会用到的方法。拿个例子,动物--哺乳动物--狗。那么所有动物都会呼吸、会吃。
像吃和呼吸方法就可以放在动物类中,但不同的动物叫声不同,动物这个超类就无法定义通用的叫声了,只能定义个抽象方法供子类去实现。
问题2:接上面,子类是可以全部覆盖所有父类抽象方法,但是像哺乳动物作为一个子类,它就不适合覆盖“叫”的方法,因为它也可以作为一个父类,去实现一些
哺乳动物才通用的方法,具体单个的动物怎么叫,还得由狗这个子类去实现。那么哺乳动物的“叫”方法也得去抽象的。
一楼说的很清楚,就是当前这个子类是不是适合重写父类方法,不适合就再扔给他的子类考虑去
定义全部的抽象方法就是当前的这个子类实现了父类的所有抽象方法
恩大概是楼上两位所说的
问题一:什么是通用的域或者方法?
所谓“域”就是范围的意思,比如常说的作用域其实就是作用范围的意思.
通用的域指的就是某一个模块或组件(模块可以简单理解为由多个方法组成的一系列逻辑操作)
之所以将通用的域和方法放在超类中是为了实现良好的复用性,子类中就不需要写重复的代码了
** 问题二:为什么非要把子类中方法也变成抽象方法?**
之所以将子类中方法也定义成抽象方法,是因为这个方法子类也不确定该怎么实现,具体的实现内容需要开发人员来确定。
举个简单的例子,假如有“论文类”这么一个抽象类,该抽象类中有“论文内容”这一方法,而“论文类”这一抽象类有
“博士论文类“、“硕士论文类”等子类,但“博士论文类”与“硕士论文类”中的内容是不一样、不确定的,因此所有
子类中也需要将“论文内容”这一方法设置为抽象方法
问题三:什么是定义全部的抽象方法
根据你所说“定义全部的抽象方法,子类就不是抽象类了”,其实就是说子类实现父类所有的抽象方法,子类就不是抽象类了。
最后,给你一点小建议,像java核心基础、java编程思想等外国书经过翻译后,有些话变得枯涩难懂,如果要看的话我建议看
原版的英语书,或者买中国人写的java基础类的书,比如疯狂java、java从入门到精通等等,比较容易理解