当前位置: 首页 > 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.dtcms.com/a/273348.html

相关文章:

  • 基于深度学习的自动调制识别网络(持续更新)
  • 亚洲牧原:活跃行业交流,延伸公益版图,市场拓展再结硕果
  • 布隆过滤器原理
  • 我的世界模组开发——机械动力的渲染(4)
  • java-io流
  • 对象序列化与反序列化
  • 【PyTorch】PyTorch 自动微分与完整手动实现对比
  • vue3 element plus table 使用固定列,滑动滚动会错位、固定列层级异常、滑动后固定列的内容看不到了
  • Java多线程 V1
  • AIStarter 3.2.0正式上线!高速下载+离线导入+一键卸载新功能详解【附完整使用教程】✅ 帖子正文(字数:约 400 字)
  • 静态路由综合实验
  • WiFi技术深度研究报告:从基础原理到组网应用与未来演进
  • python+django/flask基于微信小程序的农产品管理与销售APP系统
  • CTFshow-PWN-栈溢出(pwn62-pwn64)
  • JAVA面试宝典 -《新潮技术:协程与响应式编程实践》
  • 【Ubuntu】编译sentencepiece库
  • next.js打包后的前端资源如何进行部署和访问,为什么没有index.html
  • Vue响应式原理六:Vue3响应式原理
  • Java 17 新特性解析:密封类与模式匹配的完美协作
  • 01背包问题总结
  • 三维旋转沿轴分解
  • AWS ECS任务角色一致性检查与自动修复工具完全指南
  • LVGL学习笔记-----进度条控件(lv_bar)
  • Java结构型模式---桥接模式
  • 什么?不知道 MyBatisPlus 多数据源(动态数据源)干什么的,怎么使用,看这篇文章就够了。
  • AI探索 | 豆包智能助手跟扣子空间(AI办公助手)有什么区别
  • Ranger框架的发展历程
  • Windows系统DLL、运行库、DirectX等DLL丢失等异常状态
  • 数组的应用示例
  • 【Python进阶篇 面向对象程序设计(7) Python操作数据库】