java为什么要用abstract与Interface?

八.抽象类
有些类的实例不存在,但他代表一类不同对象的集合。如Animal类,没有动物叫Animal,但Animal尤其子类Dog,Cat等等。
抽象除了被继承外,没有值和用途
抽象的方法:抽象类中的某些行为在没有特定运行时没有任何意义,没有任何通用的实现是可行的。抽象的方法必须在抽象的类中定义。
就算无法实现方法的内容,但是可以定义出一组子类共同的协议。为了标记多态而存在。
子类必须要实现抽象类的所有抽象方法
Objectlei为所有类型的父类
编译器是通过引用类型来确认有哪些方法可以调用,而不是Object 的真正类型

Object o=dogs.get(index);
o.bark();//不允许
o.hashCode();//Object原本的方法,可以

每个对象除了真正的类型外,还可以被当作Object类型来处理
类型转换:

if(b instanceof Dog)
    Dog a=(Dog)b;

九.接口

宠物需要实现pet()方法,但狮子老虎不需要,而他们共同继承Animal 类:
1.用继承:有些方法父类有,但子类不需要有,如果继承就不符合了。有些动物没有宠物的行为…
2.用抽象:无论需不需要,所有子类必须覆盖抽象方法,浪费时间,难以复用
3.把方法加到需要的地方:多态不起作用,无法确定同一类方法是bePlet()还是doPlet(),需要针对个别类进行特殊设计
4.java不支持多重继承

解决方法:接口,接口所有的方法都是抽象的

大部分良好的设计不需要在抽先层面实现所有细节,我们需要的只是一个共同的合约,让子类去实现细节也是很好的。
允许不同继承树的类实现相同接口

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值