java学习总结--------接口

接口(interface)

接口基本概念

定义:Java中接口是全局常量,和公共抽象方法的集合(jdk8以前)。接口是一个纯粹的抽象类。

接口的简单使用

接口用interface关键字来定义。

interface  A { //定义一个接口
    public static final Integer I = 10;  //全局常量
    public abstract void fun();    //抽象方法
}

因为接口中只有全局常量和公共的抽象方法,因此对于那些修饰符全部可以去掉。即

interface  A { //定义一个接口
     Integer I = 10;  //全局常量
     void fun();    //抽象方法
}
普通类实现接口

在Java中类不允许多重继承。但一个类可以通过(implements关键字)实现多个接口,该类若不是抽象类则必须覆写接口中的所有抽象方法。

interface  A {
    Integer I = 10;
    void printA();

}
interface B {
    Integer J = 20;
    void printB();
}
class C implements A,B {

    @Override
    //该处必须使用public修饰,因为接口中的方法权限默认是public修饰的
    public void printA() {
        System.out.println("覆写A的抽象方法");
    }

    @Override
    //该处必须使用public修饰,因为接口中的方法权限默认是public修饰的
    public void printB() {
        System.out.println("覆写B的抽象方法");

    }
}

public class TestInterface {
    public static void main(String[] args) {
        A a = new C();     //子类向上转型,实例化接口对象
        B b = new C();
        a.printA();
        b.printB();
        a = (A) b;      //两个接口之间的转换
        b = (B) a;
        
    }
}

即通过一个公共的子类,可以实现两个毫无关系的父接口之间的转换。
在这里插入图片描述
同理也可以实现在一个父接口下,两个子类的相互转换。

抽象类实现接口

抽象类是普通类的超集,因此也可以实现若干个接口,且不强求覆写其中的抽象方法。


interface  A {
    Integer I = 10;
    void printA();

}
interface  B {
    String MSG = "hehe";
    void printB();
}

abstract class C implements A,B {
    @Override
    public void printB() {
        System.out.println("覆写B接口的抽象方法");
    }
    //没有覆写A接口的抽象方法
}

class D extends C {

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

public class TestInterface {
    public static void main(String[] args) {
        //向上转型实例化父类,父父接口对象
        C c = new D();
        A a = new D();
        B b = new D();
        //三层继承
    }
}

接口继承接口

Java中,一个接口可以通过extends关键字继承若干个接口。


interface  A {
    Integer I = 10;
    void printA();

}
interface  B {
    String MSG = "hehe";
    void printB();
}

interface C extends A, B {  //接口继承多个接口
    void printC();
}

class D implements C {
//    覆写其中的所有抽象方法

    @Override
    public void printC() {
        System.out.println("覆写C的抽象方法");        
    }

    @Override
    public void printA() {
         System.out.println("覆写A的抽象方法");        

        
    }

    @Override
    public void printB() {
          System.out.println("覆写的抽象方法");           
    }
}


public class TestInterface {
    public static void main(String[] args) {
        //向上转型实例化父类,父父接口对象
        C c = new D();
        A a = new D();
        B b = new D();
    }
}

抽象类与接口的区别
  • 元素组成,抽象类是普通类的超集,可以有普通类的所以东西,且还可以有抽象方法。接口只含有全局常量,和公共的抽象方法。
  • 权限: 抽象类中可以有各种权限,但接口中只有public权限。
  • 子类使用:子类通过extends来继承抽象类,且一次只能继承一个抽象类。子类通过implempents来实现接口,一次可以实现若干个接口。而且接口与接口之间,子接口也可以使用extends关键字来继承多个接口。
  • 关系:抽象类可以实现接口,但接口不能继承或者实现抽象类。
  • 使用原则:子类对抽象类的继承必须满足is–a原则,不能仅仅为了代码复用而继承,否则会使得程序很混乱。接口强调特定功能的实现,设计原则为“has — a”关系。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值