interface USB{
    void start();
    void stop();
}

class C{
    public static void work(USB u){
        u.start();
        System.out.println("工作中");
        u.stop();
    }
}

class USBDisk implements USB{

    @Override
    public void start() {
        System.out.println("U盘开始工作");
    }

    @Override
    public void stop() {
        System.out.println("U盘停止工作");
    }
    
}

class Printer implements USB{

    @Override
    public void start() {
        System.out.println("打印机开始工作");
    }

    @Override
    public void stop() {
        System.out.println("打印机停止工作");
    }
    
}

public class AbsDemo01 {

    public static void main(String[] args) {
        C.work(new USBDisk());
     C.work(new Printer());
    }    
}

结果:

U盘开始工作
工作中
U盘停止工作
打印机开始工作
工作中
打印机停止工作

 

分析:

1、在接口中,有两个抽象的方法,void start()和void stop()。其实在这两个抽象方法中,前面public abstract被省略了。

 

2、在类 C中,创建了一个work类方法。而在main()方法中,又用到了C.word(new USBDisk())和C.word(new Printer())。在这里直接用类名.方法名进行调用方法,用到了static关键字的知识。使用static修饰的类叫做类方法,类方法可以由类名直接调用,也可由实例对象进行调用。(建议用类名直接调用,因为可以直接省略了用new实例化的步骤,更简洁,更方便)

     (1)使用static声明的属性,被称为全局属性

     (2)使用static声明的方法,可以直接通过类名调用

     (3)使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能访问的。

 

3、在main()方法中,C.work(new USBDisk)进行传送参数时, 用到了父类声明和子类实例化的知识。我们可以这样来理解:USB u = new USBDisk声明部分为接口,赋值部分为实现类的这个对象u,在调用重写的抽象方法时,是调用实现类的方法