Java基本概念:接口


一、简介

描述:

  • 普通类只有具体实现,抽象类具体实现和规范都有,接口只有规范!
  • 接口就是比抽象类还抽象的抽象类,可以更加规范的对子类进行约束,全面专业地实现了规范和具体实现的分离
  • 抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法
  • 接口是完全面向规范的,规定了一批类具有的公共方法规范。
  • 从接口的实现者角度看,接口定义了可以向外部提供的服务。
  • 从接口的调用者角度看,接口定义了实现者能提供哪些服务。
  • 接口是两个模块之间通信的标准,通信的规范。如果能把你要设计的系统之间模块之间的接口定义好,就相当于完成了系统的设计大纲,剩下的就是添砖加瓦的具体实现了。做系统设计时往往就是使用面向接口的思想来设计系统。

本质:

  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人。如果你是坏人,则必须欺负好人。
  • 接口的本质是契约,就像我们人间的法律一样,制定好后大家都遵守。
  • 面向对象的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

作用:

  • 接口的最主要的作用是达到统一访问,因为实现接口的类的方法名相同,但是实现内容不同。
  • 在创建对象的时候用接口类型作为引用的类型,想用哪个实现类去做方法的内部实现,就new该实现类的对象,调用方法的时候就可以直接用接口类型的引用来调用。

二、接口与抽象类的区别

抽象类:

  1. 抽象类也是类,除了可以写抽象方法以及不能直接new对象之外,其他的和普通类没有什么不一样的。
  2. 声明类的关键字是'class'
  3. 抽象类是用来被继承的,Java中的类是单继承,继承的关键字是'extends'
  4. 抽象类的多态表现:一个抽象类的引用,可以指向这个抽象类的任意子类对象

接口:

  1. 接口已经另一种类型了,和类是有本质的区别的,所以不能用类的标准去衡量接口。
  2. 声明接口的关键字是'interface'
  3. 接口是用来被类实现的,Java中的接口可以被多实现,实现的关键字是'implements'
  4. 接口的多态表现:一个接口的引用,可以指向这个接口的任意实现类对象

三、语法

描述:

  1. 接口中可以不写任何方法,但如果写方法了,该方法必须是'public abstract'修饰的抽象方法
  2. 接口中定义抽象方法可以不用显式地声明'public abstract',不写默认就是'public abstract'修饰的。
  3. 接口中可以不写任何属性,但如果写属性了,该属性必须是'public static final'修饰的静态常量,且声明的同时就必须赋值,因为接口中不能编写静态代码块。
  4. 接口中定义静态常量可以不用显式地声明'public static final',不写默认就是'public static final'修饰的。
  5. 接口中没有构造方法,不能被实例化,但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例。
  6. 一个类可以实现多个接口;一个接口不能实现接口,但可以继承多个父接口

注意:

  • 接口必须通过类来实现它的抽象方法。
  • 类实现接口时需要实现接口的所有抽象方法,若有抽象方法没实现,这个类就必须声明为抽象类。
  • 一个引用所指向的对象,是有可能实现任何一个接口的。所以使用'instanceof'关键字判断一个接口类型引用时,只要'instanceof'关键字右边的类或接口不是'final'修饰的,就能编译通过。运行结果看引用指向的对象类型是否为右边的类的子类或实现类。

示例:

interface A {
    int NUM = 1;

    void testA();
}

interface B {
    void testB();
}

interface C extends A, B {
    void testC();
}

class Student implements C {
    public void testA() {
    }

    public void testB() {
    }

    public void testC() {
    }

    public void testD() {
    }
}

class Teacher {
}

public class Test {
    public static void main(String[] args) {
        /* c只能调用接口C中声明和继承的方法 */
        C c = new Student();
        System.out.println(c instanceof A);//true
        System.out.println(c instanceof B);//true
        System.out.println(c instanceof C);//true
        System.out.println(c instanceof Student);//true
        System.out.println(c instanceof Object);//true
        System.out.println(c instanceof Teacher);//false
        /*
            以下代码编译报错
            System.out.println(o instanceof String);
        */
    }
}

(0)

相关推荐

  • 《 高淇Java300集视频》:【3】面向对象基础

    面向过程(Procedure Oriented)和面向对象(Object Oriented,OO)都是对软件分析.设计和开发的一种思想,它指导着人们以不同的方式去分析.设计和开发软件. 面向对象编程, ...

  • Java学习——37、类的多态(二)

    类型的多态主要体现在:子类是一种父类类型. 子类通过继承扩充和发展了它的父类,子类是父类的一种特殊类型. 1.子类对象即是父类对象 子类对象包含了父类的所有成员,包括成员变量和成员方法,所以子类对象也 ...

  • Java基本概念:多态

    一.简介 描述: 多态性是面向对象编程中的一个重要特性,主要是用来实现动态联编的.换句话说,就是程序的最终状态只有在执行过程中才被决定,而非在编译期间就决定了.这对于大型系统来说能提高系统的灵活性和扩 ...

  • java中static关键字

    static关键字: 特点: 1.static是一个修饰符,用于修饰成员.(成员变量,成员函数)static修饰的成员变量称之为静态变量或类变量. 2.static修饰的成员被所有的对象共享. 3.s ...

  • 继承的使用,方法重写(覆盖),super关键字

    认识继承 不同类型的对象,相互之间经常有一定数量的共同点.例如,小明同学.小红同学.小李同学,都共享学生的特性(班级.学号等).同时,每一个对象还定义了额外的特性使得他们与众不同.例如小明的数学比较好 ...

  • Java学习——2、基本程序结构

    自从1996年Java第一次被发布就引起了人们极大的关注. 它具有令人赏心悦目的语法,易于理解的语义,高质量的执行环境,功能庞大的库-- 今天,我以一个最简单的欢迎程序来简单解释Java的基本的程序设 ...

  • java 面向对象编程

    什么是面向对象 回顾方法的定义与调用 方法的定义 import java.io.IOException; //Demo01 类 public class Demo01 { //main方法 publi ...

  • 接口的定义与实现

    普通类:只有具体实现 抽象类:具体实现和规范(抽象)都有 接口:只有规范,自己无法实现方法体~专业的约束!约束和实现分离:面向接口编程 定义接口的关键字是interface 写接口的方法可以直接写返回 ...

  • Java基本概念:内部类

    一.简介 描述: 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了. 内部类不是在一个java源文件中编写两个平行的类,而是在一个类的内部再定义另外一个 ...

  • 一文介绍Java编程思想--接口

    编程人员是最勤快的人,也是最懒惰的一群人,总是不断地学习,能够自动完成的绝对不会手写.要成为合格的Java全栈工程师?请完全理解Java的编程思想! 接口 interface关键字使抽象的概念更向前迈 ...

  • Java 抽象类与接口的区别

    很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...

  • Java开发 API接口用magic-api会如何

    magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller.Service.Dao.Mapper ...

  • java之写接口回调编程经验改进

    java之写接口回调编程经验改进

  • java文件传输接口

    开发的时候碰到这样的需求:需要在一个系统(客户端发送请求)中将文件传输至另外一个系统(服务端接收)中去的实现方式,可以批量传输文件,代码如下: 客户端请求: public String upLoadF ...

  • Java异常处理(异常基本概念)

    一:异常的基本概念 当我们的程序在运行中出现了不合理的地方则会出现异常,异 常就是终止程序运行的指令,当一行代码出现异常之后,那么后面的代码就不再继续执行,如果要让后面的代码继续需要将异常处理,异常处 ...

  • Java分布式锁的概念以及使用优点

    普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序执行,否则会出现并发问题. 设置一个各个线程都能看的见的标志 ...