前言:
而今你们对“java接口项目怎么用”大体比较珍视,看官们都想要学习一些“java接口项目怎么用”的相关资讯。那么小编也在网上网罗了一些对于“java接口项目怎么用””的相关文章,希望姐妹们能喜欢,朋友们快快来学习一下吧!Java编程基础——接口接口概述
接口是在Java编程语言中的一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
在工作中,一方面,有时必须从几个类中派生出一个子类,继承他们所有的属性和方法。但是,Java不支持多重继承,这时,接口就派上了用场,有了接口,就可以得到多重继承的效果。
另一方面,有时必须从几个类中抽取一些共同的行为特征,他们之间又不是纯粹的继承关系,仅仅是具有相同的行为特征而已,这时也可以使用接口来进行这种行为特征的抽取。
总的来说,可以把接口理解成一种规范,即接口定义的是一组规则,其本质是契约、标准、规范,就像法律一样,制定好后大家都要遵守(如果某类要实现某接口,就必须实现接口中的抽象方法)。
接口的使用
1.接口使用interface来定义
2.Java中,接口和类是并列的两个结构
3.接口的定义:定义接口中的成员
3.1 JDK7及以前:只能定义全局常量和抽象方法
全局常量:public static final *** (可以省略不写)
抽象方法:public abstract *** (可以省略不写)
interface Flyable{ //全称定义全局常量 public static final int MAX_SPEED = 7900; //省略之后仍是全局常量 int MIN_SPEED = 1; //抽象方法 public abstract void fly(); //省略之后仍是抽象方法 void stop();}
3.2 JDK8:除了定义全局常量和静态方法之外,还可以定义静态方法、默认方法。(下一部分)
4.接口中不能定义构造器,也就意味着接口是不可以实例化的。
5.Java开发中,接口是通过让类去实现(implements)来使用的,如果实现类覆盖了接口中的所有方法,则此实现类可以实例化,否则实现类为一个抽象类。当类既继承某个类又实现某个接口时,先写extends,后写implements。
class Plane extends machine implements Flyable{ //实现了接口中的抽象方法,可以实例化 @Override public void fly(){ System.out.println("飞机起飞"); } @Override public void stop(){ System.out.println("飞机降落"); }}
6.Java类可以实现多个接口
interface Attackable{ void attack();}//不同的接口之间用逗号隔开class Bullet implements FlyAble,Attackable{ //实现所有接口中的所有抽象方法 @Override public void fly(){ System.out.println("让子弹飞"); } @Override public void stop(){ System.out.println("子弹打到人了"); } @Override public void attack(){ System.out.println("子弹有攻击性") }}
7.接口和接口之间可以多继承
interface AA{ }interface BB{ }interface CC extends AA,BB{ }
8.接口的具体使用(体现多态性)
9.接口实际上可以看做一种规范
public class USBTest { public static void main(String[] args) { Computer computer = new Computer(); //多态性的体现,直接将实现类的对象传进去,该类实现了USB中的抽象方法 computer.transferData(new Flash()); }}class Computer{ //制定USB数据传输的规范,所以在具体的USB设备中需要对USB接口中的方法进行实现 public void transferData(USB usb){ usb.start(); System.out.println("***********************************"); usb.stop(); }}class Flash implements USB{ //USB方法的实现 @Override public void start() { System.out.println("Flash start"); } @Override public void stop() { System.out.println("Flash stop"); }}//USB接口的规范interface USB{ //定义一些常量,比如USB接口的长宽高。 void start(); void stop();}JDK8中接口的新特性
除了定义全局常量和静态方法之外,在JDK8中还可以定义静态方法、默认方法。
public interface CompareA { //静态方法 public static void method1(){ System.out.println("CompareA:method1!"); } //默认方法 public default void method2(){ System.out.println("CompareA:method2!"); } default void method3(){ System.out.println("CompareA:method3!"); }}
在具体使用时为了演示,首先定义了两个接口和一个类作为父类。
public interface CompareA { //静态方法 public static void method1(){ System.out.println("CompareA:method1!"); } //默认方法 public default void method2(){ System.out.println("CompareA:method2!"); } default void method3(){ System.out.println("CompareA:method3!"); } default void method4(){ System.out.println("CompareA:method4!"); } default void method5(){ System.out.println("CompareA:method5!"); }}public interface CompareB { default void method5(){ System.out.println("CompareB:method5!"); }}public class SuperClass { public void method4(){ System.out.println("SuperClass:method4!"); } public void method5(){ System.out.println("SuperClass:method5!"); }}
在真正使用时,有以下可能遇到的情况
public class SubClassTest { public static void main(String[] args) { //接口中定义的静态方法只能通过接口来调用 CompareA.method1(); //接口中定义的默认方法可以通过实现类的对象来调用 SubClass s = new SubClass(); s.method2(); //如果实现类中重写了接口中的默认方法,调用时仍然调用实现类中重写的方法 s.method3(); //如果子类(实现类)继承的父类和实现的接口中声明了同名同参数的方法默认,那 //么子类在没有重写该方法的情况下,默认调用的是父类中的同名同参数方法(类优先原则)。 s.method4(); //如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类 //没有重写此方法的情况下将会报错(接口冲突)。这就时就需要重写此方法。 s.method5(); }}class SubClass extends SuperClass implements CompareA,CompareB{ public void method3() { System.out.println("SubClass:method3!"); } @Override public void method5() { System.out.println("SubClass:method5!"); } //如果在子类(实现类)中想要调用父类的方法、接口中的默认方法,可以使用super关键字。 public void myMethod(){ //调用自己重写的方法 method5(); //调用父类中声明的方法 super.method5(); //调用接口中的默认方法 CompareA.super.method5(); CompareB.super.method5(); }}
写这个的目的一方面是复习一下Java的相关知识,另外也相当于做个标记,如果之后有相关问题可以快速找到,这算是第一篇笔记,之后可能会陆续上传许多学习过程中的笔记,如果有问题可以直接评论,我会做相应修改的。
如果对我写的文章感兴趣,或者想获取架构进阶以及大厂面试资料的可以加入我的 [Java架构社区]373786412免费获取,并相互交流学习!
标签: #java接口项目怎么用 #java接口通俗理解 #java文件传输接口 #java中接口写在哪一层