抽象类和接口

抽象类与抽象方法

抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法
抽象类与抽象方法的规则如下:

  • 抽象类不能被实例化,只能当做父类被其他子类继承,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例
  • 抽象方法不能有方法体
  • 抽象类的构造器不能用于创建实例,主要用于被其子类调用
  • 含有抽象方法的类只能被定义抽象类
  • 当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现(重写)。而final修饰的类不能被继承,final修饰的方法不能被重写,因此final和abstract不能同时使用

抽象类的作用

抽象类主要用于模板模式中:编写一个抽象父类,父类提供多个子类的通用方法,并把一个或多个方法留给子类实现,这就是一种模板模式
模板模式在面向对象软件设计中很常见,原理简单,下面是它的一些简单规则:

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

接口

接口是从多个相似类中抽象出来的规范,接口不提供任何实现。接口体现的是规范与实现分离的设计哲学。接口定义的是多个类的公共行为规范。对接口有以下规定:

  • 接口中的普通方法都是使用public abstract修饰的,并且方法不能有方法体;但类方法、默认方法都必须有方法体。
  • 接口中的变量都是public访问权限,定义接口成员时,可以省略访问权限控制符,如果指定权限,只能是public。

抽象类和接口的区别

(1)抽象类中可以构造方法 ,接口没有构造函数
(2)类可以实现很多个接口,但是只能继承一个抽象类
(3)接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。(Java8 接口可以有实例方法 需要关键字default)
(4)Java接口中声明的变量默认是public static final(必须赋初始值)。抽象类可以包含非final的变量。
(5)Java接口中的成员函数默认是public abstract的。抽象类的成员函数可以是private,protected或者是public。
(6)接口可继承接口,不能继承类(抽象类和普通类) 抽象类可继承接口也可继承具体类(继承接口时可只实现部分方法)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值