java基础:接口

一.接口的概念

接口是功能的集合,可看作是一种的数据类型,是比抽象类更抽象的类

接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样功能的定义与实现相分离,优化了程序设计

一切事物均有功能,即一切事物均有接口,接口就是功能的抽象

二.接口的声明

使用interface代替了原来的class,其他步骤与定义类的方式相同

public interface 接口名称 extends 其他的类或接口名{

        //声明变量

        //抽象方法

}

接口是隐式抽象的,当声明一个接口时,不必使用abstract关键字

三.接口的实现

当类实现接口的时候,类要实现接口中全部方法,否则该类声明为抽象类

类使用implements关键字实现接口

一个类如果实现接口,有两种操作方法;实现非抽象类需要重写接口中所有的抽象方法

实现抽象类,可以不重写接口中的抽象方法

class 类 implements 接口1,接口2...{

        //重写接口方法

}

四.接口中成员变量的特点

接口中无法定义普通的成员变量

接口中定义的变量,必须有固定的修饰符public static final,所以接口的变量也称之为常量,不可改变

接口中的成员变量必须显式初始化

interface Demo{

        public static final int num=3;

}

五.接口中成员方法的特点

接口中的成员都是public的,不能指定其他的访问修饰符

接口中的成员方法固定格式:public abstract 返回值类型 方法名字(参数列表)

子类必须覆盖接口中所有抽象方法后,子类才可以实例化,否则子类是一个抽象类

六.类和接口的多实现

将多继承这种机制在Java中通过多实现完成了

多继承的弊端:当多个父类中具有相同功能时,子类调用会具有不确定性

其原因在于多继承父类中功能有主体,调用时不确定运行哪个主体内容

多实现中由于接口中的功能都没有方法体,都是由子类或实现类重写来明确

七.接口的继承

一个接口能继承另一个接口,和类之间的继承方式比较类似。接口的继承使用extends关键字,子接口继承父接口的方法

在Java中,类的多继承是不合法的,但接口允许多继承。

八.接口与类的区别:

接口不能用于实例化对象

接口没有构造方法

接口中所有方法必须是抽象方法

接口不能包含普通成员变量,除了static和final变量

接口不是被类继承,而是被类实现

接口支持多继承

九.抽象类和接口的区别

相同点:抽象类和接口都位于继承的顶端,用于被其他类实现或继承

都不能直接实例化对象

都包含抽象方法,其子类都必须覆盖这些抽象方法

区别:抽象类中的方法可以有方法体,可以实现方法的具体功能,但是接口中的方法不行

抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的

接口中不能含有静态代码块以及静态方法(用static修饰的方法)而抽象类可以有静态代码块和静态方法

一个类只能继承一个抽象类,而可以是实现多个接口

优先使用接口,尽量少用抽象类;需要定义子类行为又要为子类提供共性功能时才选择抽象类

十.接口中的方法是否可以被重写和覆盖

对于接口方法的重载,重载条件和普通类一样,只是重载方法没有方法体

接口中的方法也可以覆盖,但是接口中不提供方法的实现,所以无意义

十一.接口的新特性------默认方法和静态方法(jdk8之后)

默认方法

可以在不影响已有类的情况下,修改接口

可以有方法实现

父类中的默认方法可以被子接口继承

子接口可以覆盖父接口中的默认方法,甚至还可以把父接口中的默认方法覆盖为抽象方法

实现接口后,因为默认方法不是抽象方法,所以可以不重写,但是如果开发需要,也可以重写

默认方法使用default 关键字,只能通过接口实现类的对象来调用。

注意:默认方法的访问权限也是默认public

静态方法

可以有方法实现

可以直接通过接口名来访问

静态方法没有方法覆盖,因为静态方法没有运行时多态

interface Test{
    //这个是默认方法
    default String get(String aa){
        System.out.println("我是jdk1.8默认实现方法...");
        return "";
    }   
    //这个是静态方法    
    static void staticmethod(){
        System.out.println("我是静态方法");
    }
}

注意事项

接口默认方法、静态方法可以有多个

默认方法通过实例调用,静态方法通过接口名调用。

default 默认方法关键字只能用在接口中。

默认方法可以被继承,如果继承了多个接口,多个接口都定义了多个同样的默认方法,实现类需要重写默认方法不然会报错。

静态方法不能被继承及覆盖,所以只被具体所在的接口调用。

十二、 标记接口

标记接口是没有任何方法和属性的接口.

它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。

标记接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。

例如:java.awt.event 包中的 MouseListener 接口继承的 java.util.EventListener 接口定义如下:

package  java.util; 
public  interface  EventListener  {

}
  • 标记接口主要用于以下两种目的:
  • 建立一个公共的父接口
    正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。 例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案
  • 向一个类添加数据类型
  • 这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值