本篇会讲到Java中接口内容,概念和注意点可能比较多,需要耐心多看几遍,我尽可能的使用经典的例子帮助大家理解~
欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
前言
接口
语法
注意
代码理解
接口运用举例
IUSB接口
KeyBoard类
Mouse类
Computer类
多个接口
代码理解(语法层面)
接口解决多继承问题 代码示例
Animal类
IFly、IRunning、ISwimming接口
Fish类
Duck类
再加上一个测试
接口间的继承
代码理解
接口是公共的行为规范标准,在Java中,接口是多个类的公共规范,是一种引用数据类型。
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!"); } }
接口的简单使用
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键盘的例子
在包demo3中,创建3个类,一个接口
package demo3; public interface IUSB { // USB接口 void openDevice();//打开服务 void closeDevice();//关闭服务 }
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("键盘输入!"); } }
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("点击鼠标!"); } }
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接口
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接口文件中的 public interface IFly { void fly(); } public interface IRunning { void run(); } public interface ISwimming { void swim(); }
鱼只会游泳这项特性,所以接口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+"游泳~"); } }
而鸭子游泳,跑,飞这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的方法一起都要重写
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()"); } }