Java中接口多态的实现方式以及创建接口实现类的对象的4种方式

Java中接口多态的实现方式以及创建接口实现类的对象的4种方式

接口多态的实现方式

语法格式:接口类型 接口名 = new 接口实现类的对象;

为了更加形象直观地理解,先举个例子,如下图:
Java中接口多态的实现方式以及创建接口实现类的对象的4种方式_第1张图片
打印机(Printer)、照相机(Camera)、投影仪(Projector)都有USB链接功能,这里有一个USB接口,让上述三个类分别实现USB接口,从而在与电脑(Computer)交互的过程中体现各自不同的交互功能。USB接口、各个实现类以及Computer类的组织架构图以及代码如下:
Java中接口多态的实现方式以及创建接口实现类的对象的4种方式_第2张图片
USB接口:

package example1;
 2023/11/15 16:32
 */
public interface USB {
    public abstract void start();//设备开始工作
    public abstract void stop();//设备结束工作
}

Camera类:

package example1;
public class Camera implements USB{
    public void start(){
        System.out.println("照相机开始工作");
    }
    public void stop(){
        System.out.println("照相机结束工作");
    }
}

Printer类

package example1;
public class Printer implements USB{
    public void start(){
        System.out.println("打印机开始工作");
    }
    public void stop(){
        System.out.println("打印机结束工作");
    }
}

Projector类

package example1;
public class Projector implements USB{
    public void start(){
        System.out.println("投影仪开始工作");
    }
    public void stop(){
        System.out.println("投影仪结束工作");
    }
}

Computer类,其中提供了一个dataTransfer()方法,用于和不同的硬件设备进行交互。方法形参为USB类型的接口。

package example1;
public class Computer {
    public void dataTransfer(USB usb){
        System.out.println("设备链接正常");
        usb.start();
        System.out.println("设备传输数据细节…………");
        usb.stop();
    }
}

ComputerTest类,测试类:

package example1;
public class ComputerTest {
    public static void main(String[] args) {
        Computer computer = new Computer();
        //1.创建接口实现类的对象
        Camera camera = new Camera();
        computer.dataTransfer(camera);
        System.out.println("1.********************");
        //2.创建接口实现类的匿名对象
        computer.dataTransfer(new Printer());
        System.out.println("2.********************");
        //3.创建接口匿名实现类的对象
        USB usb1 = new USB(){
            @Override
            public void start() {
                System.out.println("匿名实现类的对象开始工作");
            }
            public void stop(){
                System.out.println("匿名实现类的对象结束工作");
            }
        };
        computer.dataTransfer(usb1);
        System.out.println("3.********************");
        //4.创建接口匿名实现类的匿名对象;
        computer.dataTransfer(new USB(){
            public void start(){
                System.out.println("匿名实现类的匿名对象开始工作");
            }
            public void stop(){
                System.out.println("匿名实现类的匿名对象结束工作");
            }
        });
    }
}

运行结果如下:
Java中接口多态的实现方式以及创建接口实现类的对象的4种方式_第3张图片
上图右侧前两个彩色框内部的代码书写较为容易理解,现在对蓝色框(也就是创建接口匿名实现类的接口)内代码的书写做进一步详细说明:
Java中接口多态的实现方式以及创建接口实现类的对象的4种方式_第4张图片
蓝色框部分理解了,红色框部分就容易理解了。实际上,红框里面地代码实际上直接把接口匿名实现类的对象,放在了computer的dataTransfer()方法的形参里,这样减少了一步操作,也就是减少了USB usb1 = new USB(){………};这句代码的赋值操作,减少了中间变量usb1。

这个例子说明了接口多态的必要性:因为接口本身没有构造器,不能创建对象,只能由其实现类创建对象。同时,对于代码的使用者而言,dataTransfer()方法在具体实现的时候,可能是打印机、也可能是照相机、投影仪,不同的场景下调用的对象不同。但是代码编写者事先并不知道使用者想调用那个对象,于是在编写代码时,利用接口的多态性,将一个USB类型的接口放在dataTransfer()方法的形参中,形成了一定程度上的兼容和偷懒——我不管你调用哪个对象,只要是USB接口的实现类,你都可以创建相应类的对象并放进方法的参数里——这样就不必"一个类一个具体方法"的实现功能了,从而减少了代码的总量,也从某种程度上提高了开发的效率。

你可能感兴趣的:(Java,java,microsoft,开发语言)