【JavaSE】接口 详解(上)

这篇具有很好参考价值的文章主要介绍了【JavaSE】接口 详解(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

欢迎关注个人主页:逸狼


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

如有错误,欢迎指出~



目录

前言

接口

语法

注意

 代码理解

接口运用举例

IUSB接口

KeyBoard类

Mouse类

Computer类

多个接口

代码理解(语法层面)

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

Animal类

IFly、IRunning、ISwimming接口

Fish类

Duck类

再加上一个测试

接口间的继承

代码理解


接口

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

【JavaSE】接口 详解(上),电脑

【JavaSE】接口 详解(上),电脑

语法

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

接口的简单使用

  1. 接口不能被实例化
  2. 接口需要被类实现,需要使用关键字implements来实现
  3. 当一个类实现类这个接口,那么这个类要重写这个方法
  4. 接口也可以发生向上转型、动态绑定和多态。
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键盘的例子

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

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

【JavaSE】接口 详解(上),电脑

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接口

【JavaSE】接口 详解(上),电脑

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));
    }
}

测试结果

【JavaSE】接口 详解(上),电脑

接口间的继承

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

代码理解

IC继承了IA和IB,使IC接口的功能包含了IA和IB的功能,当然类TestDeme在实现接口IC时,要将IA,IB和IC的方法一起都要重写文章来源地址https://www.toymoban.com/news/detail-846944.html

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()");
    }
}

到了这里,关于【JavaSE】接口 详解(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVASE---抽象类和接口

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为

    2024年02月09日
    浏览(27)
  • 【JavaSE】Java基础语法(十八):接口

    接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。 Java中接口存在的两个意义 用来定义规范 用来做功能的拓展 接口用interface修饰 类实现接口用implements表示 接口不能实例化 我们可以创建接口的实现类对象使用 接口的子类 要么重写接口中的所有抽

    2024年02月06日
    浏览(46)
  • 【JAVASE】抽象类和接口及其抽象类和接口的区别

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 目标: 1. 抽象类 2. 接口 3. Object 类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的, 如果 一个类中

    2024年04月13日
    浏览(39)
  • JavaSE-----认识异常【详解】

    目录 一.异常的概念与体系结构: 1.1异常的概念: 1.2一些常见的异常: 1.3异常的体系结构: 1.4异常的分类: 二.异常的处理机制: 2.1 抛出异常: 2.2异常的捕获:  2.3try-catch-(finally)捕获并处理:  2.4Throwable类中的常用方法: 三.自定义异常: java中常见的异常: 1. runtime

    2024年03月18日
    浏览(35)
  • 【JavaSE】类和对象详解(下)

    面向对象程序的三大特性:封装、继承、多态~ 书接上回 类和对象(上)~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 封装 private public 快速生成可访问封装的方法 包 导包 通过import导包 模糊导入* 特殊举例 建包 static 静态成员变量 ​

    2024年04月09日
    浏览(29)
  • 【JavaSE】Java入门九(异常详解)

    目录 异常  1.Java中异常的体系结构 2.异常的处理 3.自定义异常类        在Java中,将程序执行过程中发生的不正常行为称为异常,C语言中没有这个概念,接下来我们重点需要掌握异常处理体系(try, catch, throw, finally)以及如何自定义异常类。 异常的种类繁多,Java内部维护了

    2024年02月03日
    浏览(25)
  • 【JavaSE】一维数组和二维数组详解

    欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 一维数组 基本语法 初始化 遍历和打印 数组是引用型变量 基本类型变量与引用类型变量的区别 null 数组传参和返回 总结 二维数组 基本语法 初始化 遍历和打印 数组:可以看成是相同类型元素的

    2024年04月09日
    浏览(34)
  • 【JavaSE语法】图书管理系统实现详解

            在学完JavaSE语法后,我们就可以去尝试写一个简单的图书管理系统来进一步提升我们面对对象编程的思想。在该系统中会涉及到数组,接口,封装,继承,多态等等语法知识,希望能够帮助到大家! 目录  导言 1,需求分析 (1)找对象 (2)功能设计 2,创建对象

    2024年01月21日
    浏览(29)
  • JavaSE XML解析技术的使用详解

    XML的数据作用是什么? 最终需要怎样处理 ? 作用: 存储数据、做配置信息、进行数据传输。 最终需要被程序进行读取,解析里面的信息。 XML解析就是使用程序读取XML中的数据 : 有两种解析方式 : SAX解析 DOM解析( 我们重点学习DOM解析 ) DOM常见的解析工具 : 名称 说明 JAXP SUN公司提

    2024年02月19日
    浏览(25)
  • JavaSE、JavaEE、JavaWeb 三大工程目录详解

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! JavaSE、JavaEE 和 JavaWeb 是 Java 开发中的三个重要框架,它们都是为了支持 Java 应用程序的开发而设计

    2023年04月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包