美文网首页
Java篇-接口interface关键字

Java篇-接口interface关键字

作者: TianTianBaby223 | 来源:发表于2018-04-24 22:20 被阅读215次

    一 : 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关键字

          本文链接:https://www.haomeiwen.com/subject/hmgwkftx.html