1.什么是接口呢???
接口放在现实生活中来说呢,就是手机啊。电脑的插座之类的,我们会发现那些插座几乎大家的充电口都能用,那么这就是一种标准
接口不能直接实例化,会报错
- 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()可以这样理解,调用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("小冰"));
-
- }
-
- }

从这两段代码可以看出,只要这个类继承了这个接口,就可以实现
- package demo4;
-
- /**
- * Created with IntelliJ IDEA.
- * Description:
- * User: WHY
- * Date: 2022-11-16
- * Time: 14:14
- */
- class Student implements Comparable
{ - 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
- 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]));
- }
-
- }

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

这个是调用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!!!
💚💚💚💚💚💚💚💚💚💚