关于抽象类 (水果举例)(DoWork)

抽象类是不能够实例化的类: 
它的作用就是产生子类的同时给于子类一些特定的属性和方法. 
来个简单的例子... 
如果你的程序里面需要用到苹果和梨这2个类..那么你可以分别给出这2个类 
但是你会发现这2个类里面有共同的属性和方法(属性: 都有核.. 方法: 都需要削皮吃...)那么你可以建立抽象类 "水果" 把这些共同的东西都定义在那里. 那么你的2个子类就只需要实其他必要的东东了(味道, 价格...) 

优点: 当你需要对苹果和梨做新的,共同的修改或者添加的时候. 你现在就可以直接对他们的超类 水果 做就可以了.

----------------------------------

可以确定某个类型一定会有一种操作,但是这个类型上还不能确定这个操作具体应该如何执行,而要延伸到它的子类才可以确定

比如说在一个模型中,有一个 Employee 类,可以肯定的是 Employee 都应该会有一个 doWork 方法,也就是企业员工都要工作
但是,这个工作具体应该如何做,则需要到更精确的类型才可以确定。比如“清洁工”是公司里的一个员工,他们的 doWork 方法就可以确定是打扫卫生;Sales 的 doWork 则是和客户谈生意等。
而在很多时候,我们要关注的是对象更加“泛”的类型,而不是更精确的类型。比如公司老板在招集员工开了一个短会之后,宣布散会,然后大家回去继续工作,也就是将用全体员工对象的 doWork 方法调用一次。在这里,老板在调用 doWork 方法时关注的是它的父类型,而不是子类类型,他没兴趣也没有必要去判断每个员工的子类型是什么。



这种思想在 jdk 的类库中多有体现。
比如 java.io.InputStream 类是一个抽象类,它的 read() 方法是一个抽象方法,它用于从输入流中读取一个字节的数据。
然而在 java 中,无论从网络还是从文件中读取数据都是用 Stream 类,显然文件和网络数据流的读取操作是不一样的。但是无论是网络还是文件,可以确定的是InputStream 一定会有一个 read() 方法用于从流中读取一个字节的操作。所以 InputStream 被定义成抽象类,read 方法被定义为抽象方法。read 方法是由它们的子类来完成的,文件的read方法由FileInputStream 类实现,网络输入流则是由 Socket.getInputStream 方法得到的 InputStream 的一个子类来对象来实现的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值