赞
踩
本篇会讲到Java中接口内容,概念和注意点可能比较多,需要耐心多看几遍,我尽可能的使用经典的例子帮助大家理解~
欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
接口是公共的行为规范标准,在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()");
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。