zoukankan      html  css  js  c++  java
  • Interface

    interface:接口

    使用说明:

    1. 接口使用 interface 来定义。
    1. 在 Java 中:接口和类是并列的两个结构。
    1. 如何去定义两个接口:定义接口中的成员。
      3.1 JDK7 及以前:只能定义全局常量和抽象方法。全局常量:public static final 的,但是书写中,可以省略不写。抽象方法:public abstract 的。
      3.2 JDK8 除了全局常量和抽象方法之外,还可以定义静态方法、默认方法(略)。
    1. 接口中不能定义构造器!意味着接口不可以实例化。
    1. Java 开发中,接口通过让类去实现(implements)的方式来使用。
      如果实现类覆盖了接口中的所有方法,则此实现类就可以实例化。
      如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类。
    1. Java 类可以实现多个接口--->弥补了 Java 单继承性的局限性。
      格式:class AA extends BB implementd CC,DD,EE
    1. 接口与接口之间是继承,而且可以多继承。
    1. 接口的具体使用,体现多态性。
      接口的主要用途就是被实现类实现。(面向接口编程)
    1. 接口,实际可以看作是一种规范。

    举例:

    public class USBTest {
    	public static void main(String[] args) {
    		
    		Computer com = new Computer();
    		//1.创建了接口的非匿名实现类的非匿名对象
    		Flash flash = new Flash();
    		com.transferData(flash); 
    		//2. 创建了接口的非匿名实现类的匿名对象
    		com.transferData(new Printer());
    		//3. 创建了接口的匿名实现类的非匿名对象
    		USB phone = new USB(){
    
    			@Override
    			public void start() {
    				System.out.println("手机开始工作");
    			}
    
    			@Override
    			public void stop() {
    				System.out.println("手机结束工作");
    			}
    			
    		};
    		com.transferData(phone);
    		//4. 创建了接口的匿名实现类的匿名对象
    		com.transferData(new USB(){
    			@Override
    			public void start() {
    				System.out.println("mp3 开始工作");
    			}
    
    			@Override
    			public void stop() {
    				System.out.println("mp3 结束工作");
    			}
    		});
    	}
    }
    
    
    class Computer{
    	
    	public void transferData(USB usb){//USB usb = new Flash();
    		usb.start();
    		
    		System.out.println("具体传输数据的细节");
    		
    		usb.stop();
    	}
    	
    }
    
    
    interface USB{
    	//常量:定义了长、宽
    	void start();
    	
    	void stop();
    }
    
    
    class Flash 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("打印机结束工作");
    	}
    	
    }
      /*
     * 体会:
     * 1.接口使用上也满足多态性
     * 2.接口,实际上就是定义了一种规范
     * 3.开发中,体会面向接口编程!
     * 
     */
    

    体会面向接口编程的思想

    面向接口编程:我们在应用程序中,调用的结构都是JDBC中定义的接口,不会出现具体某一个数据库厂商的API。

    JAVA8中关于接口的新规范

    知识点 1:接口中定义的静态方法,只能通过接口来调用。

    知识点 2:通过实现类的对象,可以调用接口中的默认方法。
    如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写以后的方法

    知识点 3:如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,
    那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。-->类优先原则

    知识点 4:如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,
    那么在实现类没有重写此方法的情况下,报错。-->接口冲突。
    这就需要我们必须在实现类中重写此方法

    知识点 5:如何在子类(或实现类)的方法中调用父类、接口中被重写的方法

      public void myMethod(){
            method3(); //调用自己定义的重写的方法
            super.method3(); //调用的是父类中声明的
            //调用接口中的默认方法
            CompareA.super.method3();
            CompareB.super.method3();
      }
    

    面试题:

    抽象类和接口的异同?
    相同点:不能实例化;都可以包含抽象方法的。
    不同点:
    1)把抽象类和接口(java7,java8,java9)的定义、内部结构解释说明
    2)类:单继承性 接口:多继承
    类与接口实现关系:多实现

    接口的应用:

    代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
    工场模式:实现类创建者与调用者的分离,即将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

  • 相关阅读:
    Qt计算器开发(三):执行效果及项目总结
    [HNOI2019]校园旅行
    How to fix nuget Unrecognized license type MIT when pack
    How to fix nuget Unrecognized license type MIT when pack
    git 通过 SublimeMerge 处理冲突
    git 通过 SublimeMerge 处理冲突
    git 上传当前分支
    git 上传当前分支
    gif 格式
    gif 格式
  • 原文地址:https://www.cnblogs.com/NTyee/p/13188914.html
Copyright © 2011-2022 走看看