广东微信网站制作多少钱,wordpress教育汉化主题,连云港网站建设公司,做软件用什么软件前言 本篇会讲到Java中接口内容#xff0c;概念和注意点可能比较多#xff0c;需要耐心多看几遍#xff0c;我尽可能的使用经典的例子帮助大家理解~ 欢迎关注个人主页#xff1a;逸狼 创造不易#xff0c;可以点点赞吗~ 如有错误#xff0c;欢迎指出~ 目录 前言 接口 语法…前言 本篇会讲到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 开头接口的命名一般使用 形容词 词性的单词.阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性. 代码理解
package demo2inter;public interface ITestInterFace {public static final int a100;int AGE10;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{Overridepublic void draw() {System.out.println(画一个矩形);}
}
class Triangle implements ITestInterFace{Overridepublic 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接口
package demo3;public interface IUSB {// USB接口void openDevice();//打开服务void closeDevice();//关闭服务}
KeyBoard类
package demo3;public class KeyBoard implements IUSB {Overridepublic void openDevice() {System.out.println(打开键盘);}Overridepublic void closeDevice() {System.out.println(关闭键盘);}public void input(){System.out.println(键盘输入);}
}
Mouse类
package demo3;public class Mouse implements IUSB{Overridepublic void openDevice() {System.out.println(打开鼠标);}Overridepublic 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 computernew 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{Overridepublic void testA() {System.out.println(testA());}Overridepublic void testB() {System.out.println(testB());}
}
public class Test4 {public static void main(String[] args) {TestDemo4 testDemo4new TestDemo4();testDemo4.testA();testDemo4.testB();}}
接口解决多继承问题 代码示例
在demomoreinher包中有Animal抽象类DuckFish类 以及IFly、IRunning、ISwimming接口 Animal类
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接口
//注意这里的代码是在不同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);}Overridepublic void eat() {System.out.println(this.name吃鱼粮);}Overridepublic 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);}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游泳~~~);}
}
再加上一个测试
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时要将IAIB和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{Overridepublic void testA() {System.out.println(testA());}Overridepublic void testB() {System.out.println(testB());}Overridepublic void testC() {System.out.println(testC());}
}