【Java】接口的讲解与使用,你还有要补充的嘛?

178 阅读5分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解java实现单链表,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan

文章目录

🌈接口的基础语法

1、接口的定义
 public interface 接口名{

 }

2、接口可以说是 抽象方法 以及 常量值的集合
    为什么这样说?是因为接口中只含有这两类:
    	常量 以及 方法的定义
    所以接口实际上也是'一种特殊的抽象类'
    但是里面没有变量以及实现的方法
    
3、和普通的类一样,接口也可以拥有方法和属性
    所有的属性默认使用 public static final 进行修饰
    所有的方法默认使用 public abstract 进行修饰
    
4、为什么要使用接口?
    在实际的开发过程中,有时候需要从几个类中派生出一个子类来继承它们的属性和方法,
	但是java不支持多继承,为了解决这一问题,接口出现了,以此变相实现多继承的效果
    而且接口可以降低程序的耦合度,提高程序的扩展性
    
5、怎么去实现一个接口?使用 implements 关键字
	Class 类名  implements 接口1{
    	//实现接口1中规定的抽象方法
	}

6、怎么实现多个接口?
    Class 类名  implements 接口1,接口2{
    	//实现所有接口的所有抽象方法
	}
	一个类实现多个接口的时候,不建议使用多态来创建实现类的对象(下见实例)

7、接口之间支持多继承
    interface X{
    }
    interface Y{
    }
    interface Z extends X,Y{
    }

8、接口之间即使没有继承关系,也可以直接互转,(类之间不行)
    但是运行时可能会出现:ClassCastException
    所以转型之前先 if + instanceof 进行判断。
                
9、继承和实现都存在的话,代码应该怎么写?
		extends 关键字在前。
		implements 关键字在后。
        
10、	但凡满足is a的表示都可以设置为继承,例如:Cat is a Animal,
	 但凡是满足has a的表示都以属性形式存在,例如:Bird has a mouth

🥝接口开发实例

🎯单实现例子

/**
 * @Author jinhuan
 * @Date 2022/3/22 17:50
 * Description:测试类
 */
public class Test {
    public static void main(String[] args) {
        
        //接口不可以直接new对象
        //FlyAble flyAble = new FlyAble();
        //多态,接口就像(父类一样)实现接口“等价于”继承
        FlyAble cat = new Cat();
        //调用接口中的方法
        cat.fly();
    }
}

class Cat implements FlyAble{
    @Override
    public void fly() {
        System.out.println("猫咪实现了FlyAble接口,猫儿插上了翅膀开始飞翔!!!");
    }
}
interface FlyAble {
    void fly();
}

image-20220322175854646

🏓多实现实例

/**
 * @Author jinhuan
 * @Date 2022/3/22 17:50
 * Description:测试类
 */
public class Test {
    public static void main(String[] args) {
       /*
            多态,接口就像(父类一样)实现接口“等价于”继承
            FlyAble cat = new Cat();
            调用接口中的方法
            cat.fly();
            注意,此时的cat对象是通过FlayAble进行创建的
            虽然cat实现了DanceAble接口,但是依旧无法调用DanceAble的方法
            会出现not found method的错误
            cat.dance();
            所以当一个类实现多个接口的时候,建议不使用多态创建对象
        */

        Cat newCat = new Cat();
        newCat.fly();
        newCat.dance();

    }
}


interface FlyAble {
    void fly();
}
interface DanceAble {
    void dance();
}

class Cat implements FlyAble,DanceAble{
    @Override
    public void fly() {
        System.out.println("猫咪实现了FlyAble接口,猫儿插上了翅膀开始飞翔!!!");
    }

    @Override
    public void dance() {
        System.out.println("猫咪实现了DanceAble接口!猫咪在边走猫步边跳舞!!!");
    }
}

image-20220322182934197

✨ 接口的多继承以及接口间的类型转换

/**
 * @Author jinhuan
 * @Date 2022/3/22 17:50
 * Description:测试类
 */
public class Test {
    public static void main(String[] args) {
        //多态创建A的实现类对象
        A w = new W();
        //A 和 B 两个接口之间没有继承关系
        //对 A的实现类对象 进行强转为 B类型,并没有报错
        B b = (B) w;
        //但是在运行的时候会出现 ClassCastException
        //所以转型之前先 if + instanceof 进行判断

        //实例化C的实现类
        C m = new M();
        m.a();
        m.b();
        m.c();

    }
}

/**
 * 定义三个接口
 * */
interface A{
    void a();
}

interface B{
    void b();
}

/**
 * 一个类实现 A、B
 * */
interface C extends A,B{
    void c();
}

/**
 * 类 W 实现接机 A
 * */
class W implements A{
    @Override
    public void a() {
        System.out.println("A被实现了!");
    }
}

/**
 * 类 M 实现接口 c
 * 接口C 继承了 接口A和B
 * */
class M implements C{
    @Override
    public void a() {
        System.out.println("A被实现了!");
    }

    @Override
    public void b() {
        System.out.println("B被实现了!");
    }

    @Override
    public void c() {
        System.out.println("C被实现了!");
    }
}

image-20220322201507281

🐳接口类综合实例

package com.blog.interfaceTests;

/**
 * @Author jinhuan
 * @Date 2022/3/22 20:39
 * Description:
 */
public class UsbTest {
    public static void main(String[] args) {
        //多态实例化Usb的实现类——键盘类
        Usb keyBoard = new KeyBoard();
        //调用键盘的use方法
        keyBoard.use();
        
        //多态实例化Usb的实现类——鼠标类
        Usb mouse = new Mouse();
        //调用鼠标的use方法
        mouse.use();
    }
}


/**
 * Use接口类
 * */
interface Usb {
    /**
     * USB接口的使用
     */
    void use();
}

/**
 * 鼠标类
 * */
class Mouse implements Usb{
    @Override
    public void use() {
        System.out.println("鼠标正在通过USB接口操作窗口!");
    }
}

/**
 * 键盘类
* */
class KeyBoard implements Usb{
    @Override
    public void use() {
        System.out.println("键盘正在使用USB接口写东西!");

    }
}

image-20220322204408306

🤡写在最后

以上均为菜鸟分享日常,如有不当之处,劳请各位批评指正!本人将第一时间纠正!谢谢!另外,我自己整理了一些资源(笔记、书籍、软件等)分享在我的公众号上,非常欢迎大家来访白嫖和博主做朋友,一起学习进步!最后别忘啦支持一下博主哦,求三连!❤️❤️❤️

image-20220428105519763