抽象类和接口

抽象类

  • 抽象类可以不含有抽象方法,含有抽象方法的一定是抽象类或者接口。
  • 抽象类(的构造器)不能用于创建实例,只能被当作父类被其他子类继承,如果子类是普通类,则必须实现所有抽象方法。
  • final修饰的类不能被继承,因此abstract和final不能同时出现。
  • 使用static修饰方法时,通过类就可以调用该方法,但是如果被定义成抽象方法,则调用时会出现错误,因此static和final不能同时修饰方法,但是他们可以同时修饰内部类。
  • abstract方法必须被子类重写才有意义,因此,abstract方法不能定义为private。
  • 抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象,以抽象类作为子类的模板,从而避免了子类设计的随意性。

模板模式及其简单规则:

模板模式:编写一个抽象父类,父类提供多个子类的通用方法,并把一个或多个方法留给其子类实现。

简单规则:

  1. 抽象父类可以制定一需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现。
  2. 父类可能含有需要调用其他系列方法的方法,这些被调方法既可以由父类实现,也可以由其子类实现。父类里提供的方法
    只是定义类一个通用算法,其实现也许不完全由自身实现,而必须依赖其子类的辅助。

接口

  • 一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
  • 接口定义的是一种规范,接口里不能包含构造器和初始化块定义,接口里的成员变量只能是静态变量,方法只能是抽象方法、类方法或默认方法。
  • Java 8允许在接口中定义默认方法,默认方法必须使用default修饰,该方法不能使用static修饰,无论程序是否指定,默认方法总是使用public修饰。接口里的成员变量默认使用public static final修饰。

接口和抽象类用法上的区别:

  1. 接口体现的是一种规范,一种标准。而抽象类作为多个子类的共同父类,体现的是一种模板式设计。
  2. 接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供实现;抽象类则完全可以包含普通方法。
  3. 接口里只能定义静态常量,不能定义普通成员变量;抽象类两者都可以。
  4. 接口里不含构造器,而抽象类里可以含有构造器(不用来创建对象,让其子类调用来完成属于抽象类的初始化操作)。
  5. 接口里不包含初始化块,抽象类可以。
  6. 一个类最多只能由一个直接父类(包括抽象类);但一个类可以直接实现多个接口,来弥足Java单继承的不足。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值