【JavaSE】接口 详解(上)

逸狼 2024-08-13 08:35:02 阅读 57

前言

本篇会讲到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 开头接口的命名一般使用 "形容词" 词性的单词.阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性.

 代码理解

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

<code>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等动物特性应该采用接口方式

<code>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的方法一起都要重写

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

}

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。