接口的特点&&接口与抽象类的对比

什么是接口:

       在说明接口特点前,先要了解什么是接口,接口(Interface),它是一个抽象类型,是全部由抽象方法组成,简单来说,其实它就是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法

        如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。

示例:

/**
 * Created  on 2018/4/18.
 */
public interface InterfaceDemo {//定义一个接口
        public static final String MSG = "hello";//全局常量
        public abstract void print();//抽象方法
    }

 接口的实现:

       接口的实现通过implements 关键字,其基本格式如下:
        [修饰符] class <类名> [extends 父类名] [implements 接口列表]{

        }

        修饰符:可选参数,用于指定类的访问权限,可选值为public、abstract和final。
        类名:必选参数,用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。
        extends 父类名:可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数。
        implements 接口列表:可选参数,用于指定该类实现的是哪些接口。当使用implements关键字时,接口列表为必选参数。当接口列表中存在多个接口名时,各个接口名之间使用逗号分隔。
        在类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。

接口的特点:

1.      接口是对外暴露的规则;

2.      接口是程序的功能扩展

3.      接口的出现降低耦合性

4.      接口可以用来多实现

5.      类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口

6.      接口与接口之间可以有继承关系(Java中只有这里可以多继承,其余都是单继承)


抽象类与接口的对比

   相同点:

   1:都是不断向上抽取而来的

   不同点:

1.      抽象类需要被继承,而且只能单继承,接口需要被实现,而且可以多实现

2.      抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法;接口中只能定义抽象方法,必须由子类去实现。

抽象类的继承,是 is a 关系,在定义该体系的基本共性内容,接口的实现是 like a 关系,在定义体系额外功能。


接口的使用

1、由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。接口的使用原则如下: 
(1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口; 
(2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法; 

(3)接口的对象可以利用子类对象的向上转型进行实例化。

示例:

/**
 * Created  on 2018/4/18.
 */
interface A{//定义一个接口A

    public static final String MSG = "hello";//全局常量

    public abstract void print();//抽象方法
}

interface B{//定义一个接口B

    public abstract void get();
}

class X implements A,B{//X类实现了A和B两个接口

    @Override
    public void print() {
        System.out.println("接口A的抽象方法print()");
    }

    @Override
    public void get() {
        System.out.println("接口B的抽象方法get()");
    }

}

public class InterfaceDemo {

    public static void main(String[] args){

        X x = new X();//实例化子类对象
        A a = x;//向上转型
        B b = x;//向上转型

        a.print();
        b.get();
    }

}

输出结果:

接口A的抽象方法print()
接口B的抽象方法get()



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值