Java篇-接口interface关键字

一 : interface关键字

接口是与类并行的一个概念
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

① 接口可以看做是一个特殊的抽象类,是常量与抽象方法的一个集合,不能够包含变量,一般的方法

interface AA{
    //常量 : 所有的常量都用public static finial修饰 默认的,写不写都有
    int I = 15;
//  public static final int I = 12;
//  public static final boolean FLAG = false;
    
    /*抽象方法 
     * 
     * 抽象方法:所有的都用public abstract 修饰
            写不写都有
     * */
    void method1();
    void method2();
//  public abstract void method1();
//  public abstract void method2();
    
}

② 接口是没有构造器的

③接口定义的就是一种功能,此功能可以被类所实现(implements)

class CC  implements AA{
    public void method1() {
        
    }
    public void method2() {
        
    }
    
}

④ 实现接口的类,必须要重写其中的所有抽象方法,方可实例化,若没有重写所有的抽象方法,则此类仍为一个抽象类

abstract class BB implements AA{
    
}

⑤ 在java中的继承是单继承的,但是类可以实现多个接口.
接口 TZ

interface TZ{
    void method3();
}

类 CC 实现多个接口

class CC  implements AA,TZ{
   public void method1() {
       
   }
   public void method2() {
       
   }
   public void method3() {
           
   }
   
}

⑥ 接口与接口之间也是继承的关系,而且可以实现多继承.
接口 MM 继承接口 TZ,AA

//java 中接口之间仍为继承关系!(多继承)
interface MM extends TZ,AA{
   void method4();
   
}

二 : 接口与具体的实现类之间存在多态

定义功能接口

interface Runner{
     void run();
}

interface Swimmer{
    void swim();
}
interface Flier{
    
    void fly();
}

定义接口的实现类

class Duck implements Runner,Swimmer,Flier{
    public void run() {
         System.out.println("跑啊");
     }
     
     @Override
    public void swim() {
         System.out.println("游泳啊");
    }
     
     @Override
    public void fly() {
         System.out.println("飞翔啊");
    }
    
}

多态的使用

public class TestInterface {
    
    public static void main(String[] args) {
        Duck d = new Duck();
        TestInterface.test1(d);//Runner r = new Duck();
        TestInterface.test2(d);//Swimmer s = new Duck();
        TestInterface.test3(d);//Flier f = new Duck();
    }
    
    //接口的多态性
    public static void test1(Runner r) {
        r.run();//虚拟方法调用
        
    }
    public static void test2(Swimmer s) {
        s.swim();
        
    }
    public static void test3(Flier f) {
        f.fly();
        
    }
}

三 : 接口的应用

  • 面向接口编程,定义一个USB接口,分别实现打印机,手机,相机,U盘的 USB接口功能实现

定义USB接口

interface USB {

    // 功能设置为抽象方法
    void start();

    void stop();
}

实现接口类 :
打印机

class printer implements USB {

    @Override
    public void start() {
        // TODO Auto-generated method stub
        System.out.println("打印机开始工作");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("打印机停止工作");
    }
}

U盘

class Flash implements USB {
    @Override
    public void start() {
        // TODO Auto-generated method stub
        System.out.println("U盘开始工作");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("停止工作");
    }

}

电脑类

class Computer {

    public void dowork(USB usb) {
        usb.start();
        System.out.println("---设备开始工作");
        usb.stop();

    }
}

进行连接实现

public class TestUSB {
    public static void main(String[] args) {
        Computer com = new Computer();
        com.dowork(new printer());

        Flash f = new Flash();
        com.dowork(f);  
}

实现接口匿名类对象

//实现接口的匿名类的对象
USB phone = new USB() {

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

            @Override
            public void stop() {
                System.out.println("手机停止连接");
            }
            
        };
        System.out.println();
        com.dowork(phone);

或者

//实现接口的匿名类的对象
        com.dowork(new USB() {
            
            @Override
            public void start() {
                // TODO Auto-generated method stub
                System.out.println("手机开始工作");
            }
            @Override
            public void stop() {
                // TODO Auto-generated method stub
                System.out.println("手机停止连接");
            }
            
        });
  • 工厂设计模式

工厂模式的目的在于程序的可扩展性。而对于简单工厂模式来说,它是为了让程序有一个更好地封装,降低程序模块之间的耦合程度。
对于简单的工厂模式,其实也可以将其理解成为一个创建对象的工具类。

返回对象接口

//接口 返回一个对象
interface  IWorkFactory{
    Work getWork(); 
}

学生对象接口

class  StudentWorkFactory implements IWorkFactory{
    
    public Work getWork() {
        return new Studentwork();
        
    }
}

教师对象接口

class  TeacherWorkFactory implements IWorkFactory{
    
    public Work getWork() {
        return new TeacherWork();   
    }
}

work接口

interface Work{
    void dowork();
}

学生工作接口

class Studentwork implements Work{
    
    public void dowork() {
            System.out.println("学生写作业");
    }
}

教师工作接口

class TeacherWork implements Work{
    
    public void dowork() {
        System.out.println("老师批改作业");
    }
    
}

使用

public class TestFactoryMethod {
    public static void main(String[] args) {
        IWorkFactory i = new StudentWorkFactory();
        i.getWork().dowork();;
        
        IWorkFactory i1 = new TeacherWorkFactory();
        i1.getWork().dowork();
        
    } 
} 

  • 代理设计模式

接口

interface Object{
    void action();  
    
}

被代理类

//被代理类
class objectImpl implements Object{
    public void action() {
        // TODO Auto-generated method stub
        System.out.println("===被代理类开始执行");
        System.out.println("===具体操作");
        System.out.println("===被代理类执行完毕");
        
    }
}

代理类

class ProxyObject implements Object{
    Object obj;
    public ProxyObject() {
        
        System.out.println("代理类创建成功");
        obj = new objectImpl();
    }
    
    @Override
    public void action() {
        // TODO Auto-generated method stub
        System.out.println("代理类开始执行");
        obj.action();
        System.out.println("代理类执行结束");

    }
}

调用

public class TestProxy {
    public static void main(String[] args) {
        Object obj = new ProxyObject();
        obj.action(); 
    }
}

你可能感兴趣的:(Java篇-接口interface关键字)