当前位置: 首页 > news >正文

接口(上篇)

接口(上篇)

  • 1.概念
  • 2.语法规则
  • 3.使用和特性
  • 4.实现多接口
  • 5.接口间继承

1.概念

接口就是公共的行为规范标准,大家在实现时,
只要符合规范标准,就可以通用。
在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型

2.语法规则

接口的定义格式与定义类的格式基本相同,
将class关键字换成 interface 关键字,就定义了一个接口

3.使用和特性

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

  1. 接口类型是一种引用类型,但是不能直接new接口的对象
  2. 接口中每一个方法都是public的抽象方法,
    即接口中的方法会被隐式的指定为 public abstract
  3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现
  4. 重写接口中方法时,不能使用默认的访问权限
  5. 接口中可以含有变量,
    但是接口中的变量会被隐式的指定为 public static final 变量
  6. 接口中不能有静态代码块和构造方法
  7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
  8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类
  9. jdk8中:接口中还可以包含default方法
public class Computer {public void powerOn() {System.out.println("打开电脑...");}public void powerOff() {System.out.println("关闭电脑.....");}public void useDevice(IUSB iusb) {iusb.openDevice();if(iusb instanceof KeyBoard ) {KeyBoard keyBoard = (KeyBoard)iusb;keyBoard.input();}if(iusb instanceof Mouse) {Mouse mouse = (Mouse)iusb;mouse.click();}iusb.closeDevice();}
}
public interface IUSB {void openDevice();void closeDevice();//public abstract
}
public class KeyBoard implements IUSB{@Overridepublic void openDevice() {System.out.println("打开键盘服务....");}public void input() {System.out.println("键盘输入数据.....");}@Overridepublic void closeDevice() {System.out.println("关闭键盘服务....");}
}
public abstract class MicroPhone implements IUSB{public abstract void test();
}class ITest extends MicroPhone {@Overridepublic void openDevice() {}@Overridepublic void closeDevice() {}@Overridepublic void test() {}
}
public class Mouse implements IUSB{@Overridepublic void openDevice() {System.out.println("打开鼠标服务...");}public void click() {System.out.println("点击鼠标.....");}@Overridepublic void closeDevice() {System.out.println("关闭鼠标服务...");}
}
public class Test {public static void main(String[] args) {Computer computer = new Computer();computer.powerOn();computer.useDevice(new KeyBoard());computer.useDevice(new Mouse());computer.powerOff();}}

4.实现多接口

在Java中,类和类之间是单继承的,一个类只能有一个父类,
即Java中不支持多继承,但是一个类可以实现多个接口

public abstract class Animal {public String name;public int age;public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void eat();//如果把 跑   游泳    飞  这些功能写到这里面 可以不可以   1:可以  2:不可以  -》 2// 不是所有的动物 都具备 这些功能
}
public class Bird extends Animal implements IFlyable{public Bird(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+" 正在吃鸟粮....");}@Overridepublic void fly() {System.out.println(this.name+" 正在飞....");}
}
public class Dog extends Animal implements ISwimmable,IRunable {public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+" 正在吃狗粮.....");}@Overridepublic void run() {System.out.println(this.name+" 正在跑...");}@Overridepublic void swim() {System.out.println(this.name+" 正在游泳...");}}
public class Duck extends Animal implements IFlyable,IRunable,ISwimmable{public Duck(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+" 正在鸭粮....");}@Overridepublic void fly() {System.out.println(this.name+" 正在飞....");}@Overridepublic void run() {System.out.println(this.name+" 正在跑....");}@Overridepublic void swim() {System.out.println(this.name+" 正在游泳....");}
}
public interface IFlyable {void fly();
}
public interface IRunable {void run();
}
public interface ISwimmable {void swim();
}
public class Robot implements IRunable{@Overridepublic void run() {System.out.println("机器人在跑.....");}
}
public class TestDemo {public static void walk(IRunable runable) {runable.run();}public static void swim(ISwimmable iSwimmable) {iSwimmable.swim();}public static void fly(IFlyable iFlyable) {iFlyable.fly();}public static void main(String[] args) {Bird bird = new Bird("小鸟·",3);Dog dog = new Dog("小狗",13);Duck duck = new Duck("小鸭",5);Robot robot = new Robot();walk(duck);walk(dog);walk(robot);System.out.println("=====");swim(duck);swim(dog);System.out.println("====");fly(duck);fly(bird);}public static void eatFun(Animal animal) {animal.eat();}}

5.接口间继承

在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承

interface A {void testA();
}
interface B {void testB();
}
//extends 拓展
interface C extends A,B {void testC();
}public class TestDemo2 implements C{@Overridepublic void testA() {}@Overridepublic void testB() {}@Overridepublic void testC() {}
}
http://www.lryc.cn/news/584140.html

相关文章:

  • 编译OpenHarmony-4.0-Release RK3566 报错
  • 【保姆级教程】基于anji-plus-captcha实现行为验证码(滑动拼图+点选文字),前后端完整代码奉上!
  • 前端面试十一之TS
  • 电路研究9.4——合宙Air780EP的LuatOS、CSDK跟标准AT
  • 【Ubuntu】编译sentencepiece库
  • php中array($this, ‘loadClass‘)表示啥意思?
  • 【STM32 学习笔记】WDR看门狗
  • 在 Apple 生态中,`aarch64` 和 `arm64` 本质上是相同的架构
  • 解决问题:在cmd中能查看到pnpm版本,在vscode终端中却报错
  • Rust and the Linux Kernel
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十七天
  • 【世纪龙科技】汽车信息化综合实训考核平台(机电方向)-学测
  • 倍福套料VE变量和M函数新增配置
  • python学习打卡:DAY 30 模块和库的导入
  • 2. 【Blazor全栈开发实战指南】-- 目录
  • 敏捷测试中的质量闸门如何设置?
  • STM32F103C8T6单片机内部执行原理及启动流程详解
  • 深入了解 Vim 编辑器:从入门到精通
  • 学习中断配置的一天(第五天)
  • 《PyQt6-3D:开启Python 3D编程新世界 2》
  • Spring Boot中的中介者模式:终结对象交互的“蜘蛛网”困境
  • Synopsys 逻辑综合之 MultiBit Flip-Flop 与 ICG
  • SIMATIC S7-1200的以太网通信能力:协议与资源详细解析
  • 深度学习-正则化
  • 小架构step系列10:日志热更新
  • B2、进度汇报(— 25/06/16)
  • 【运维架构】云计算运维架构师与基础设施,技术路线,Linux证书(标准化/定制化/CNCF,公有云/混合云/私有云)
  • Tomcat:Java Web应用的幕后英雄
  • linux 4.14 kernel屏蔽arm arch timer的方法
  • 防抖在vue中应用