跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 跨境学堂 > 【JavaSE】接口 详解(上)

【JavaSE】接口 详解(上)

时间:2024-04-08 08:45:43 来源:网络cs 作者:焦糖 栏目:跨境学堂 阅读:

标签:
阅读本书更多章节>>>>

前言

本篇会讲到Java中接口内容,概念和注意点可能比较多,需要耐心多看几遍,我尽可能的使用经典的例子帮助大家理解~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

接口

语法

注意

 代码理解

接口运用举例

IUSB接口

KeyBoard类

Mouse类

Computer类

多个接口

代码理解(语法层面)

接口解决多继承问题 代码示例

Animal类

IFly、IRunning、ISwimming接口

Fish类

Duck类

再加上一个测试

接口间的继承

代码理解


接口

接口是公共的行为规范标准,在Java中,接口是多个类的公共规范,是一种引用数据类型

语法

定义格式与类基本相同,将class关键字换成interface关键字接口中的成员变量(习惯上是大写)默认为public static final 修饰的(写的时候可省略public static final),必须被初始化接口中的方法默认只能是public abstract 修饰的(也可省略不写,不写默认也是抽象方法(不能有具体的实现,否则会报错),用其他修饰符会报错)接口中使用default修饰的方法static修饰的方法是可以有具体的实现的接口中不能有静态代码块、示例代码块构造方法。接口虽然不是类,但编译完成后也是字节码文件(后缀名是.class)。

注意

创建接口时, 接口的命名一般以大写字母 I 开头接口的命名一般使用 "形容词" 词性的单词.阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性.

 代码理解

package demo2inter;public interface ITestInterFace {    public static final int a=100;    int AGE=10;        abstract public void fun1();    void fun2();    default void func(){        System.out.println("default!");    }    public static void staticFunc(){        System.out.println("staticFunc!");    }}

接口的简单使用

接口不能被实例化接口需要被类实现,需要使用关键字implements来实现当一个类实现类这个接口,那么这个类要重写这个方法接口也可以发生向上转型、动态绑定和多态。

public interface ITestInterFace {    void draw();}class Rect implements ITestInterFace{    @Override    public void draw() {        System.out.println("画一个矩形!");    }}class Triangle implements ITestInterFace{    @Override    public void draw() {        System.out.println("画一个三角形!");    }}class Test{    public static void drawMap(ITestInterFace iTestInterFace){        iTestInterFace.draw();    }    public static void main(String[] args) {        drawMap(new Rect());//发生了向上转型和动态绑定        drawMap(new Triangle());    }}

接口运用举例

请实现笔记本电脑使用USB鼠标、USB键盘的例子

USB接口:包含打开设备、关闭设备功能笔记本类:包含开机功能、关机功能、使用USB设备功能鼠标类:实现USB接口,并具备点击功能键盘类:实现USB接口,并具备输入功能

在包demo3中,创建3个类,一个接口

IUSB接口

package demo3;public interface IUSB {    // USB接口    void openDevice();//打开服务    void closeDevice();//关闭服务}

KeyBoard类

package demo3;public class KeyBoard implements IUSB {    @Override    public void openDevice() {        System.out.println("打开键盘!");    }    @Override    public void closeDevice() {        System.out.println("关闭键盘!");    }    public void input(){        System.out.println("键盘输入!");    }}

Mouse类

package demo3;public class Mouse implements IUSB{    @Override    public void openDevice() {        System.out.println("打开鼠标!");    }    @Override    public void closeDevice() {        System.out.println("关闭鼠标!");    }    public void click(){        System.out.println("点击鼠标!");    }}

Computer类

package demo3;import demo2inter.ITestInterFace;public class Computer {    public void powerOff (){        System.out.println("关闭电脑!");    }    public void powerOn(){        System.out.println("打开电脑!");    }    public void useDevice(IUSB usb){        usb.openDevice();        //这里要区分 USB引用了哪个对象        if(usb instanceof Mouse){            Mouse mouse =(Mouse) usb;//向下转型            mouse.click();        }        //调用键盘        if(usb instanceof KeyBoard){            KeyBoard keyBoard=(KeyBoard) usb;            keyBoard.input();        }        usb.closeDevice();    }    public static void main(String[] args) {        Computer computer=new Computer();        computer.powerOn();        computer.useDevice(new KeyBoard());//向上转型        computer.useDevice(new Mouse());        computer.powerOff();    }}

多个接口

Java中不支持多继承,但是一个类可以实现多个接 口。接口表达含义是 具有**特性,可以帮助程序员忘掉类型,只关注特性。

代码理解(语法层面)

类TestDemo4实现了IA和IB接口

package demo4;//多个接口interface IA{    void testA();}interface IB{    void testB();}class TestDemo4 implements IA,IB{    @Override    public void testA() {        System.out.println("testA()");    }    @Override    public void testB() {        System.out.println("testB()");    }}public class Test4 {    public static void main(String[] args) {        TestDemo4 testDemo4=new TestDemo4();        testDemo4.testA();        testDemo4.testB();    }}

接口解决多继承问题 代码示例

在demomoreinher包中有Animal抽象类,Duck,Fish类 以及IFly、IRunning、ISwimming接口

Animal类

IFly、IRunning、ISwimming等动物特性应该采用接口方式

package demomoreinher;public abstract class Animal {    protected String name;    protected int age;    public Animal(String name, int age) {        this.name = name;        this.age = age;    }    public abstract void eat();    //像跑 游泳 飞等动作不能写在这里,因为不是所有动物都会这些技能  应该写在接口中}

IFly、IRunning、ISwimming接口

//注意:这里的代码是在不同IFly、IRunning、ISwimming接口文件中的public interface IFly {    void fly();}public interface IRunning {    void run();}public interface ISwimming {    void swim();}

Fish类

鱼只会游泳这项特性,所以接口ISwimming

package demomoreinher;public class Fish extends Animal implements ISwimming{//如果这里游泳写出类,java是不支持多继承的,所有说接口解决了多继承问题    public Fish(String name, int age) {        super(name, age);    }    @Override    public void eat() {        System.out.println(this.name+"吃鱼粮!");    }    @Override    public void swim() {        System.out.println(this.name+"游泳~");    }}

Duck类

而鸭子游泳,跑,飞这3个技能都会,所以三个特性都接上

package demomoreinher;public class Duck extends Animal implements ISwimming,IFly,IRunning{    public Duck(String name, int age) {        super(name, age);    }    @Override    public void eat() {        System.out.println(this.name+"吃鸭粮!");    }    @Override    public void fly() {        System.out.println(this.name+"飞~~~");    }    @Override    public void run() {        System.out.println(this.name+"跑~~~");    }    @Override    public void swim() {        System.out.println(this.name+"游泳~~~");    }}

再加上一个测试

package demomoreinher;public class TestAnimal {    public static void eatFunc(Animal animal){        animal.eat();//实现eat的动态绑定    }    public static void walk(IRunning running){        running.run();//实现跑的动态绑定    }    public static void main(String[] args) {        walk(new Duck("唐老鸭",3));        eatFunc(new Fish("灵儿",2));    }}

测试结果

接口间的继承

相当于将接口合并在一起了

代码理解

IC继承了IA和IB,使IC接口的功能包含了IA和IB的功能,当然类TestDeme在实现接口IC时,要将IA,IB和IC的方法一起都要重写

package demo5;//接口继承问题interface IA{    void testA();}interface IB{    void testB();}//IC接口不仅具备了自己的testC这个功能,还 扩展 了IA和IB的功能interface IC extends IA,IB{    void testC();}class TestDemo implements IC{    @Override    public void testA() {        System.out.println("testA()");    }    @Override    public void testB() {        System.out.println("testB()");    }    @Override    public void testC() {        System.out.println("testC()");    }}

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/xuetang/2024-04-08/155343.html,文章来源:网络cs,作者:焦糖,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论