接口与抽象类

一.接口

使用关键字interface来定义一个接口,接口的定义和类的定义很相似,分为接口声明和接口体

1.接口声明

interface 接口名字

2.接口体

接口体中包含常量(使用final关键字修饰的变量)的定义和抽象方法的定义。

接口中所有常量的访问权限必须是public,而且是static常量,允许省略public、final、static修饰符。为什么接口中的变量都必须是public权限的静态常量呢?原因如下

  • 声明为public是因为接口作为一种抽象“协议”需要被其他类实现,实现类应当能够继承接口中的变量
  • 声明为static是因为接口可以多实现,如果一个类实现了多个接口,假如这些接口中都有一个变量a,那么在这个实现类中如何区分这些继承而来的同名变量?如果加上static关键字,就可以通过接口名.变量名来进行区分。
  • 声明为final是因为接口代表着一种标准,标准自然不能随便修改,即对修改关闭

Java 8以前,接口中的方法必须是抽象方法,不能有普通方法,且抽象方法的访问权限一定是public,同样也允许省略public、abstract修饰符。实现接口的非抽象类必须重写接口中的所有抽象方法,在重写接口方法,方法的访问权限必须显式地声明为public权限,否则就降低了访问权限,这是不允许的。

一个接口定义的例子如下:

interface Printable{

int MAX = 100; //该语句相当于public final static int MAX 100

void add();//该语句相当于public abstract void add()

}

在Java 8中,允许在接口中增加静态方法,同时静态方法要有默认实现,不能没有方法体。实例如下:

public interface Service{

     public static int testMethod(int i){

            return i;

    }

}

二.抽象类

用关键字abstract修饰的类称为抽象类

和普通类相比,抽象类的特点是可以包含抽象方法,即用abstract关键字修饰的方法,抽象方法只允许声明,不允许实现,而且不允许使用final和abstract同时修饰一个方法或类,这是因为抽象类的子类需要重写其抽象方法,如果抽象类被final修饰,那么它无法被继承,同样如果抽象方法被final修饰,子类则无法重写其抽象方法,也不允许使用static修饰abstract方法,即abstract方法必须是实例方法。

三.接口与抽象类的区别

  • 接口中只可以有常量,不可以有变量;而抽象类中既可以有常量,也可以有变量
  • 接口中不可以有非抽象方法,抽象类中可以有非抽象方法
  • 抽象类可以有构造方法,接口中不能有构造方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值