接口讲解

1.接口的诞生:

             学过c,c++的应该知道C语言是面向过程的,C++是面向对象的,面向对象的一个特征:多态;(面向对象的语言都支持的三个概念:封装,继承,多态),C++实现多态的方法就是继承,C++支持一个类继承多个类,但对于Java语言其中有一个特点就是只能继承一个类,不能继承多个类,而为了解决这个问题,接口就产生了。因此,接口的一个特性就是一个类可以实现多个接口。


2.什么是接口:

             接口这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。(好比喻工作时间表,规定了你在某时刻应该干什么,类实现接口相当于,你在这时刻干了什么)

类实现接口使用:implements
接口的格式:

[public]interface 接口名称 [extends 父接口列表]
{
[public ] [static][final] 数据类型 成员变量=常量;
[public][abstract]返回值的数据类型 方法名(参数表);
}
2.1 接口的举例

public interface Cat {
    public static final int number=100;
    public abstract void run();
//  public default void print()
//  {
//      System.out.println("在接口中实现默认的方法");
//  }

}
3 接口的特性
  1. 接口和抽象类一样不能被实例化。cat=new Cat()//error 然而,接口不能构造接口的对象却能声明接口的变量。如Cat c。
  2. 接口中的变量时静态常量 如果写int number=100;默认的是public static final ;接口中的方法时抽象的方法,不写默认是public abstract。
  3. jdk8 接口可以实现默认的方法如
    public default void print()
    {
    System.out.println("在接口中实现默认的方法");
    }
  4. 接口可以继承多个接口(extends)如:
    public interface Name extends Me,Me2{
    public static final int i=10;
    abstract public   void  add();
    }

    5.实现接口的类必须要覆写接口中的全部抽象方法。
    6.接口没有构造函数的


4 接口的实现

1 对于要实现接口的类,可以用implements 关键字来实现接口。
例子:
interface1接口:

public interface Interface1 {
    public final static String name="interface1";
    public abstract void print1();
    public default void print()
    {
        System.out.println("interface1的实现默认方法");
    }

}

实现接口的类:

public class InterfaceImpl implements Interface1{

    @Override
    public void print1() {
        // TODO Auto-generated method stub
        System.out.println("impl interface1");
    }
    public static void main(String[] args) {
        InterfaceImpl impl=new InterfaceImpl();
        //重写接口的方法
        impl.print1();
        //接口的默认方法
        impl.print();
        //接口的名称
        System.out.println(Interface1.name);
    }
}

运行结果:

impl interface1
interface1的实现默认方法
interface1

2 接口的对象可以利用子类对象的向上转型进行实例化。(如果接口对象要调用子类自己的方法,必须强制类型转换。否则接口对象只能调用自己定义的方法在子类的实现。)

public class InterfaceImpl implements Interface1{

    public void add()
    {
        System.out.println("子类自己的方法");
    }

    @Override
    public void print1() {
        // TODO Auto-generated method stub
        System.out.println("impl interface1");
    }
    public static void main(String[] args) {
//      InterfaceImpl impl=new InterfaceImpl();
//      //重写接口的方法
//      impl.print1();
//      //接口的默认方法
//      impl.print();
//      //接口的名称
//      System.out.println(Interface1.name);
        Interface1 inter1=new InterfaceImpl();
        inter1.print();
        inter1.print1();
        System.out.println(Interface1.name);
        //inter1.add();//error
        ((InterfaceImpl) inter1).add();
    }
}

结果:

interface1的实现默认方法
impl interface1
interface1
子类自己的方法
接口的继承

接口继承(extends):
interface2 :

public interface Interface2 {
    public final static String name="interface2";
    public abstract void print2();
    public default void print()
    {
        System.out.println("interface2的实现默认方法");
    }

}

interface3:


public interface Interface3 {
    public final static String name="interface3";
    public abstract void print3();
    public default void print()
    {
        System.out.println("interface3的实现默认方法");
    }

}

interface1:

public interface Interface1 extends Interface2,Interface3{
    public final static String name="interface1";
    public abstract void print1();
    public default void print()
    {
        System.out.println("interface1的实现默认方法");
    }

}

实现interface1的类:

public class InterfaceImpl implements Interface1{

    public void add()
    {
        System.out.println("子类自己的方法");
    }

    @Override
    public void print1() {
        // TODO Auto-generated method stub
        System.out.println("impl interface1");
    }
    public static void main(String[] args) {
//      InterfaceImpl impl=new InterfaceImpl();
//      //重写接口的方法
//      impl.print1();
//      //接口的默认方法
//      impl.print();
//      //接口的名称
//      System.out.println(Interface1.name);
        Interface1 inter1=new InterfaceImpl();
        inter1.print();
        inter1.print1();
        System.out.println(Interface1.name);
        //inter1.add();//error
        ((InterfaceImpl) inter1).add();
    }

    @Override
    public void print2() {
        // TODO Auto-generated method stub
        System.out.println("interface2");
    }

    @Override
    public void print3() {
        // TODO Auto-generated method stub
        System.out.println("interface3");
    }
}

转载于:https://blog.51cto.com/12666319/2116842

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值