接口(上)

简介: 接口(上)

🐷1.接口的概念

🐱‍🚀2.接口的语法规则

💚3.接口的使用

🚀4.接口的特性

🎆5.实现多个接口

🐶6.接口间的继承

🎊7.接口使用的实例

1.什么是接口呢???


接口放在现实生活中来说呢,就是手机啊。电脑的插座之类的,我们会发现那些插座几乎大家的充电口都能用,那么这就是一种标准


Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

也就是对抽象类的的进一步抽象


接口的语法规则

接口用interface来修饰

创建接口时, 接口的命名一般以大写字母 I 开头.

接口的命名一般使用 "形容词" 词性的单词.

fb56da1f71ed42d4bdf69ee1719c163e.png

接口不能直接实例化,会报错


interface IShape{
    public abstract void  draw();
    public static final String name="一宝";
     default   public    void func(){
         System.out.println("默认的");
    }
}
class Rect implements IShape{
    @Override
    public void draw() {
        System.out.println("🟥");
    }
}
class  Circle implements IShape{
    @Override
    public void draw() {
        System.out.println("○");
    }
}
class  Heart implements IShape{
    @Override
    public void draw() {
        System.out.println(";❤");
    }
}
public class Test {
    public static void main(String[] args) {
        IShape shape = new Rect();
        IShape shape2 = new Circle();
        IShape shape3 = new Heart();
        shape.draw();
        shape.func();
        shape2.draw();
        shape2.func();
        shape3.draw();
        shape3.func();
    }
}

这个代码的结果是什么呢,shape.func()可以被调用吗???


6ea7e96d6fbf4174af7291f9fd7e78a3.png


对于shape.func()可以这样理解,调用shape.draw()发生动态绑定,就到那个Rect重写的draw方法去了,但是调用shape.fun()就到接口中去了,因为func本身也是一个抽象方法,因为有了default的修饰,所以可以不在子类中重写,通过接口的引用,就直接到IShape当中去调了


下面实现电脑USB接口


package demo2;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2022-11-16
 * Time: 10:52
 */
interface  IUSB{
    void openDevice();
    void closeDevice();
}
class  KeyBoard implements IUSB  {
    @Override
    public void openDevice() {
        System.out.println("打开键盘");
    }
    @Override
    public void closeDevice() {
        System.out.println("关闭键盘");
    }
    public void intput(){
        System.out.println("敲击键盘");
    }
}
class   Mouse implements IUSB{
    @Override
    public void openDevice() {
        System.out.println("打开鼠标");
    }
    @Override
    public void closeDevice() {
        System.out.println("关闭鼠标");
    }
    public void click(){
        System.out.println("点击鼠标");
    }
}
class Computer{
    public void open(){
        System.out.println("开机");
    }
    public void close(){
        System.out.println("关机");
    }
    public void useDevice(IUSB  usb){//判断一下是不是所有的USB接口都可以被使用
        usb.openDevice();
        if(usb instanceof Mouse){
            Mouse mouse=(Mouse)usb;//向下转型
            mouse.click();//执行子类中特有的方法
        }else if(usb instanceof KeyBoard){
            KeyBoard keyBoard=(KeyBoard)usb;
            keyBoard.intput();
        }
        usb.closeDevice();
    }
}
public class Test {
    public static void main(String[] args) {
            Computer computer=new Computer();
                IUSB  iusb=new KeyBoard();//向上转型
                computer.useDevice(iusb);
                IUSB iusb1=new Mouse();
                computer.useDevice(iusb1);
    }
}


package demo3;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2022-11-16
 * Time: 13:48
 */
abstract class Animal{
    public String name;
    public Animal(String name) {
        this.name = name;
    }
}
interface IRunning{
    void run();
}
interface ISwimming{
    void swim();
}
interface IFly{
    void fly();
}
class Dog extends Animal  implements  IRunning{
    public Dog(String name) {
        super(name);
    }
    @Override
    public void run() {
        System.out.println(name+"正在跑");
    }
}
class Duck extends Animal implements  IFly,IRunning,ISwimming{
    public Duck(String name) {
        super(name);
    }
    @Override
    public void run() {
        System.out.println(name+"正在跑");
    }
    @Override
    public void fly() {
        System.out.println(name+"正在飞");
    }
    @Override
    public void swim() {
        System.out.println(name+"正在游泳");
    }
}
class  robot implements ISwimming{
    public String name;
    public robot(String name) {
        this.name = name;
    }
    @Override
    public void swim() {
        System.out.println(name+"机器人在游泳");
    }
}
public class TestDemo {
    public static void walk(IRunning iRunning){
        iRunning.run();
    }
    public static void swim(ISwimming iSwimming){
        iSwimming.swim();
    }
    public static void main(String[] args) {
        walk(new Dog("贝贝"));
        walk(new Duck("丫丫"));
        swim(new Duck("丫丫1"));
        swim(new robot("小冰"));
    }
}

486adbdff6cc40b5b8683cdd8c35b67d.png


从这两段代码可以看出,只要这个类继承了这个接口,就可以实现


package demo4;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2022-11-16
 * Time: 14:14
 */
class Student  implements Comparable<Student>{
    public String name;
    public int age;
    public int score;
    public Student(String name, int age, int score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
    public int compareTo(Student o){//根据年龄比较排序
        if(this.age>o.age){
            return 1;
        }else if(this.age<o.age){
            return -1;
        }else{
            return 0;
        }
    }
}
//根据姓名字母排序
 /* if(this.name.compareTo(o.name) > 0) {
            return 1;
        }else if(this.name.compareTo(o.name) < 0) {
            return -1;
        }else {
            return 0;
        }*/
//使用冒泡排序实现依据年龄排序
public class Test {
    public static void sort(Comparable[] array) {
        for (int i = 0; i < array.length-1; i++) {
            for (int j = 0; j < array.length-1-i; j++) {
                /*if(array[j] > array[j+1]) {
                    交换;
                }*/
                if(array[j].compareTo(array[j+1]) > 0) {
                    Comparable tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                }
            }
        }
    }
    public static void main(String[] args) {
        Student[]  students=new Student[3];
        students[0]=new Student("wangyibo",25,100);
        students[1]=new Student("weihongyan",19,99);
        students[2]=new Student("gaoyan",19,95);
        System.out.println(students[0].compareTo(students[1]));
    }
}

64a7c85a540c456ca2f287e4c5a723fa.png


这个是调用sort函数实现排序


9f0d58b7515444e9a1ed99af0bbc3d83.png


这个是调用compareTo方法实现的


当比较字符串是否相等用equals方法,当比较大小也要用compareT方法,要是想从大到小排,换个return  就好


下面来总结一下接口的知识点


使用interface 接口来定义接口


接口不能被实例化


接口中的方法默认是public abstract 修饰的


接口中的成员默认是public static  final  修饰的


接口当中的方法,不能有具体实现,但是从jdk8开始,可以写一个default来修饰,我已经子啊前面的代码展示并解释了


接口当中不能有构造方法


接口需要被类实现,使用关键字implements


接口中可以有static修饰的方法


接口和接口之间使用关键字extends继承,与类的单继承不一样啊,类可以同时继承多个接口,接口和接口之间也可以多继承


interface A {
    void funcA();
}
interface B {
    void funcB();
}
//CC这个接口 不仅仅具备func这个功能,还具备了A和B接口的功能
interface CC extends A,B {
    void funcC();
}
class C implements CC {
    public void funcA() {
    }
    public void funcB() {
    }
    public void funcC() {
    }
}
public class Test2 {
}


就像这个,一个接口也可以同时继承多个接口,并拥有被继承接口的功能


类继承另一个类同时实现多个接口,代码也有体现到

今天的内容就到此结束,我们下期再见,886!!!

💚💚💚💚💚💚💚💚💚💚


相关文章
|
1月前
|
存储 Java 容器
JAVACollection接口
JAVACollection接口
20 1
|
1月前
接口
使用使用接口的时候,需要注意: 1.接口是没有静态代码块或者构造方法的。 2,一个类只能继承一个,但是一个类可以同时实现多个接口。 格式: public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB {} 3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。 4、如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。 5如果实现类锁实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进 行覆善重写。 6.一个类如果直接父类当中的方法,和接口当中的
18 1
|
1月前
使用接口
使用接口的时候,需要注意: 1.接口是没有静态代码块或者构造方法的。 2,一个类只能继承一个,但是一个类可以同时实现多个接口。 格式: public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB {} 3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。 4、如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。 5如果实现类锁实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进 行覆善重写。 6.一个类如果直接父类当中的方法,和接口当中的默认
172 29
|
7月前
|
Java
【接口的使用】
【接口的使用】
36 0
|
7月前
|
Java
【实现多个接口的使用】
【实现多个接口的使用】
40 0
|
10月前
|
Java
接口2
接口2
49 1
|
程序员
14 接口
14 接口
81 0
|
Java Maven
一文了解ConfigurationConditon 接口
在了解ConfigurationCondition 接口之前,先通过一个示例来了解一下@Conditional 和 Condition。
96 0
|
Java 程序员 编译器
🛰️🛰️五、实现多个接口
🛰️🛰️五、实现多个接口
176 0
🛰️🛰️五、实现多个接口
|
Java
接口详解介绍
接口详解介绍
114 0