use*_*592 4 java abstract-class overriding
这对许多人来说可能是一个简单的问题,但让我很困惑.我从Kathy Sierra中选择了一个示例,它展示了Abstract Classes的实用性,但我无法理解抽象类的整体重要性.
示例
我们有一个抽象类Car和抽象方法 - power()&topSpeed().这些方法在宝马,大众和奥迪等子类中实施.
我的问题是 -为什么我们需要首先使用抽象类Car来为每种车型定制方法?为什么不在这些汽车的任何一种汽车中使用这两种方法,宝马和其他两种 - 大众汽车和奥迪 - 可以简单地改写这些方法吗?
通过使方法抽象,意味着人们必须实现它.你需要人们这样做,人们不可能忘记这样做,因为如果他们这样做就无法编译.
该@override注释存在一个非常类似的原因,通过标记的方法,@override你会得到一个错误,如果(例如)您键入的方法名错了,实际上没有覆盖的东西.
在许多方面,抽象类是接口和普通类之间的一半 - 它定义了你需要做什么来以与接口相同的方式使用它,但它也为你处理一些实现.
类只能扩展另一个类.他们可以实现任意数量的接口.
例如,你可能已经MotorVehicle继承了Car,Motorbike然后Train- 但是你可能有一个Steerable实现的接口Car,Motorbike和Pedalbike.
要在评论中回答这个问题:
如果有一个接口"I"的方法m()由类"A"实现而另一个类"B"想要访问方法m(),那么接口的需求是什么.我们可以简单地在A类中实现该方法吗?
你可以 - 但是如果另一方面,类B想要m()在类A和类中访问该方法C(其中A和C不相互继承或者包含m()的公共类)那么这样做的方法是指定一个公共接口I和B类使用接口类型I,而不是类型A和C.
还要记住,可以在包和库之间使用接口.例如,Listener和Strategy模式大量使用接口.当Java开发人员编写JButton(例如)时,将ActionLstener其指定为接口,以便为JButtons将来使用的人提供最大的灵活性.
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |