【JavaSE】接口

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

接口的概念

接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。接口的定义格式与定义类的格式基本相同,将class关键字换成 interface 关键字,就定义了一个接口。

public interface 接口名称{
	// 抽象方法
	public abstract void method1(); // public abstract 是固定搭配,可以不写
	public void method2();
	abstract void method3();
	void method4();
	// 注意:在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁
}

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

接口的使用

接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法。

public class 类名 implements 接口名{
	// ...
}

注意:子类和父类之间是extends 继承关系,类与接口之间是implements 实现关系。
示例:
请实现笔记本电脑使用USB鼠标、USB键盘的例子
1.USB接口:包含打开设备、关闭设备功能
2.笔记本类:包含开机功能、关机功能、使用USB设备功能
3.鼠标类:实现USB接口,并具备点击功能
4.键盘类:实现USB接口,并具备输入功能
创建USB接口

public interface USB {
	void openDevice();
	void closeDevice();
}

创建鼠标类Mouse,实现USB接口

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

创建键盘类KeyBoard,实现USB接口

public class KeyBoard implements USB {
	@Override
	public void openDevice() {
		System.out.println("打开键盘");
	} 
	@Override
	public void closeDevice() {
		System.out.println("关闭键盘");
	}
	public void inPut(){
		System.out.println("键盘输入");
	}
}

创建笔记本类Computer,使用USB设备

public class Computer {
   public void powerOn(){
       System.out.println("打开笔记本电脑");
   }
   public void powerOff(){
       System.out.println("关闭笔记本电脑");
   }
   public void useDevice(USB usb){
       usb.openDevice();
       if(usb instanceof Mouse){
           Mouse mouse = (Mouse)usb;
           mouse.click();
       }else if(usb instanceof KeyBoard){
           KeyBoard keyBoard = (KeyBoard)usb;
           keyBoard.inPut();
       } 
       usb.closeDevice();
   }
}

创建测试类TestUSB

public class TestUSB {
	public static void main(String[] args) {
		Computer computer = new Computer();
		computer.powerOn();
		// 使用鼠标设备
		computer.useDevice(new Mouse());
		// 使用键盘设备
		computer.useDevice(new KeyBoard());
		computer.powerOff();
	}
}

接口的特性

接口类型是一种引用类型,但是不能直接new接口的对象。

public class TestUSB {
	public static void main(String[] args) {
		USB usb = new USB();//error USB是抽象的 无法实例化
	}
}

接口中每一个方法都是public的抽象方法,即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)

public interface USB {
	private void openDevice();// error 此处不允许使用private
	void closeDevice();
}

接口中的方法是不能在接口中实现的,只能由实现接口的类来实现。

public interface USB {
	void openDevice();
	// 编译失败:因为接口中的方式默认为抽象方法
	// error 接口抽象方法不能带有主体
	void closeDevice(){
		System.out.println("关闭USB设备");
	}
}

重写接口中方法时,不能使用默认的访问权限。

public interface USB {
	void openDevice(); // 默认是public的
	void closeDevice(); // 默认是public的
}

public class Mouse implements USB {
	@Override
	void openDevice() {  //error
		System.out.println("打开鼠标");
	}
} 

接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量。

public interface USB {
	double brand = 3.0; // 默认被:final public static修饰
	void openDevice();
	void closeDevice();
}

public class TestUSB {
	public static void main(String[] args) {
		// 可以直接通过接口名访问,说明是静态的
		System.out.println(USB.brand); 
		// 编译报错:error 无法为最终变量brand分配值
		USB.brand = 2.0; // 说明brand具有final属性
	}
}

接口中不能有代码块和构造方法

public interface USB {
	public USB(){} // 编译失败
	{} // 编译失败
	static {} // 编译失败
	void openDevice();
	void closeDevice();
}

接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是 .class。如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。 jdk8中,接口中还可以包含default方法。

public interface ITest {
    //一定要被重写
    void testA(); 
    //static修饰不能被重写
    static void testStatic() {
        System.out.println("testStatic()");
    }
    //default修饰可以被重写也可以不被重写
    default void defaultMethod() {
        System.out.println("defaultMethod()");
    }
}

class TestDemo implements ITest {
    @Override
    public void testA() {
        System.out.println("重写testA()!");
    }
}

实现多个接口

Java中不支持多继承,但是一个类可以实现多个接口。
定义一个Animal的类

public class Animal {
    String name;
    public Animal(String name) {
        this.name = name;
    }
}

提供两个接口 Run 和 Fly

public interface Run {
    void running();
}
public interface Fly {
    void flying();
}

创建一个Bird

public class Bird extends Animal implements Run,Fly {
    public Bird(String name) {
        super(name);
    }

    @Override
    public void flying() {
        System.out.println(name + "在飞翔");
    }

    @Override
    public void running() {
        System.out.println(name + "在跑");
    }
}

创建一个Dog

public class Dog extends Animal implements Run {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void running() {
        System.out.println(name + "在飞快地跑");
    }
}

最后创建一个测试类TestInterface

public class TestInterface {
    public static void main(String[] args) {
        Dog dog = new Dog("大黑");
        Bird bird = new Bird("小白");
        dog.running();
        bird.running();
        bird.flying();
    }
}

注意:一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置为抽象类。

接口间的继承

在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。接口可以继承一个接口, 达到复用的效果. 使用 extends 关键字。

interface IRunning {
	void run();
} 
interface ISwimming {
	void swim();
} 
// 两栖动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}

接口间的继承相当于把多个接口合并在一起。

抽象类和接口的区别

核心区别:抽象类中可以包含普通方法和普通字段,这样的普通方法和字段可以被子类直接使用(不必重写),而接口中不能包含普通方法,子类必须重写所有的抽象方法。文章来源地址https://www.toymoban.com/news/detail-669305.html

区别 抽象类(abstract) 接口(interface)
结构组成 普通类+抽象方法 抽象方法+全局常量
权限 各种权限 public
子类使用 使用extends关键字继承抽象类 使用implements关键字实现接口
子类限制 一个子类只能继承一个抽象类 一个子类可以实现多个接口
关系 一个抽象类可以实现若干接口 接口不能继承抽象类,但是接口可以使用extends关键字继承多个接口

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

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

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

相关文章

  • JavaSE——初始java

    目录 一.Java是什么 二.Java语言的特性 1. 简单性 2. 面相对象 3. 分布式(微服务) 4. 健壮性 5. 安全性 6. 体系结构中立 7. 可移植性 8. 解释性 9. 高性能 10. 多线程 11. 动态性 三.JDK环境配置 1.简介 2.安装  3.配置 4.检验 四.第一个Java程序 1.初始程序 2.运行程序 3.JDK、JRE、JVM三者之间的

    2023年04月08日
    浏览(40)
  • 【JavaSE】初识java

    目录 Java语言概述 Java是什么 Java语言重要性 语言广泛使用程度 工作领域 在校招中的岗位需求​编辑 Java语言发展简史 Java语言特性 ​编辑Java开发环境安装 初识Java的main方法 main方法示例 运行Java程序 JDK、JRE、JVM之间的关系 注释 基本规则 注释规范 标识符 ​编辑 总结

    2024年02月16日
    浏览(38)
  • 如何用chatGPT快速开发java后端功能接口

      需求如图 常规无非是建表接口测试类,最后造数据进行自测。突发奇想,要不用GPT试一下快速写业务代码? 第一步:建表,直接复制excel中内容到GPT中  第二步:要求转为下划线:    第三步:给出条件和想要的结果(下面第一幅图是自己写的,其它代码图都是GPT生成的)

    2024年02月06日
    浏览(39)
  • 【JavaSE】Java的反射机制

    1.java反射机制 1.1简介 被视为动态语言的关键,允许程序在执行期间,借助于RefectionAPI取得任何类的内部信息。在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个类对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方

    2024年04月26日
    浏览(41)
  • 【JavaSE】Java方法的使用

    【本节目标】 1. 掌握方法的定义以及使用 2. 掌握方法传参 3. 掌握方法重载 4. 掌握递归 目录 1.方法概念及使用 1.1什么是方法(method) 1.2 方法定义 1.3 方法调用的执行过程 1.4 实参和形参的关系 2. 方法重载 2.1 为什么需要方法重载 2.2 方法重载概念 3. 递归 3.1 生活中的故事 3.2 递

    2024年02月12日
    浏览(40)
  • Java面试整理(二)《JavaSE》

    说明:我会根据我自己的经验,给每个内容标注重要程度,共有三个等级:低、中、高。仅个人参考意见。 JVM是Java Virtual Machine的缩写,是用于运行Java字节码的虚拟机,JVM是运行在操作系统之上,这也是Java程序为什么能够运行在不同的平台或操作系统的原因。 JVM是Java语言

    2024年02月09日
    浏览(32)
  • 【JavaSE】java刷题--数组练习

    本篇讲解了一些数组相关题目(主要以代码的形式呈现),主要目的在于巩固数组相关知识。 上一篇 数组 讲解了一维数组和二维数组的基础知识~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 思路 首先要判断 空指针和空数组 的情况,利用 字符

    2024年04月10日
    浏览(44)
  • 【JavaSE】第一个Java程序

    在JavaSE的系列中,将从第一个Java程序开始叙述,系统的把JavaSE的内容总结一次。毕竟这是第二次学习JavaSE的内容,因此感触也相对比较深一些。在JavaSE的初步计划中,大概有十一到十三篇文章,大致有:第一个Java程序、变量与运算符、流程控制、面向对象(封装、继承、多

    2024年01月22日
    浏览(39)
  • 【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

    List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆的性质): 存储的元素是⽆序的、不可重复的。 Queue (实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。 Map (⽤ key 来搜索的专家): 使⽤键值对(key-value)存

    2024年02月10日
    浏览(42)
  • 【JavaSE】Java入门九(异常详解)

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

    2024年02月03日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包