java学习(三)-抽象类和接口

1、抽象(abstract)
1.1、抽象类
  • 抽象类不可以被实例化(初始化),只能作为子类的超类。但是抽象类可以声明为引用类型变量作为多态的向上转型方式使用。
  • 抽象类一定要被继承
  • 抽象类中一定有抽象方法,也可以有非抽象方法
1.2、抽象方法
  • 抽象方法,也是用过abstract标记,抽象方法必须被子类重写。
  • 含有抽象方法的类,一定是抽象类。不能在非抽象类中拥有抽象方法。
  • 抽象方法是没有实体内容的,只是定义出一组子类中共同的协议(抽取共同特性的概念)。所有的子类都拥有这些方法,避免了代码的重复。
2、接口
2.1、接口的缘来
  • 接口的产生,是为了解决java单继承不能满足一个类想要的两种父类的共同特性,比如动物类、宠物类;猫和狗都拥有这两种父类的特性,而猪、河马等值具有动物的特性,因此不能把宠物的特性放到动物类里,这样会使其他子类都继承了该特性。因此加入了接口的概念,一个类可以实现多个接口,自行扩展接口里的方法。
  • 多重继承的致命方块问题:无法确定调用的方法是哪个父类的方法
2.2、接口的概念
  • 接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情
3、区别
  • 抽奖类,是对类(包括属性和行为)进行抽象;接口,是对行为进行抽象,
  • 抽象类,一般都是知道会有子类,并抽离出其通用性规则;接口,一般不知道其实现类,只是定出一些规则
  • 子类,只能继承一个父类;实现接口类,可以实现多个接口
  • 抽奖类,可以拥有任意成员变量、也可以拥有非抽象方法;接口,只能有静态(static)、不可修改(final)的变量和抽象方法,但是jdk8之后,这种规定变化,且可以拥有default方法(所有实现通用的方法可以直接定义在接口中),
  • 接口是抽象类的特殊化
4、如何判断使用类、子类、抽象类和接口
  • 如果新的类无法对其他的类通过IS-A的测试时,则设计不继承其他类的类
  • 只有在需求某类的特殊化版本时,以覆盖或者增加新的方法来继承现有的类
  • 当你需要定义一群子类的模板,又不想让程序员初始化此模板的时候(即抽象类中不然被实例化的特性),设计出抽象的类给他们使用
  • 如果想要定义出类可以扮演的角色,使用接口。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值