接口不是类,而是一个特殊的名称,使用interface关键字。子类可以实现多个接口。

接口实现:

public class Child extends Parent implements InterfaceOne,InterfaceTwo{}

接口只提供了对象的行为签名,而没有任何实现。

它不可以直接被实例化,它只能在被子类实现为一个具体类型后才能使用。

InterfaceOne one = new Child();

使用接口的同时,又带来面向父类编程的优势,代码更加通用、清晰。

接口的定义:

public interface Service{

int data = 10;

void send(int data);

int receive();

}

接口定义知识将原来定义类的class关键字换成interface关键字。

接口中的方法定义和通常的方法定义一样,只是没有实现体。接口中的方法只能是公有的public abstract,可以省略不写。接口中的data变量看似是一个成员变量,但事件上默认它是一个公有的静态的final变量(即常量)。完整的Service类如下:

public interface Service{

public static final int data = 10;

public abstract void send(int data);

public abstract int receive();

}

接口是统一的服务,客户都是可以全部使用的。

接口的实现:

实现Service接口:

public class ConcreteService implements Service{

public void send(int data){

System.out.println("data");

}

public int receive(){

return 10;}

}

attentions:

完全实现了所有所有接口方法的类就是一个具体的类。

部分实现了接口方法的类是一个抽象的类。

接口通过实现(implements)演变成为一个类(class)。

接口可以通过继承(extends)创建新的子接口。

可以把接口理解为一个完全抽象的类,只是用法稍有区别。

(1)可以多重实现(类似多重继承,但是更纯净),使用关键字implements实现到类的演变。

(2)方法默认全部公有public,所有方法只有定义,没有实现。

(3)所有变量默认是公有静态final的常量,而且必须被显示初始化。

其他与普通类使用方法没有任何区别。

 public interface Service{
void send(int data);
int receive();
}
abstract class AbstractService implements Service{
public void send(int data){
System.out.println(data);
}
}
class ConcreteService extends AbstractSevice{
public int receive(){
return 10;
}
public static void main(String[] args){
Service service = new ConcreteService();
Service.send(10);
}
}

当多重实现多个接口时,可能会出现被实现函数混淆问题。此时问题无法解决,只能尽可能避免此问题的出现。

接口和抽象类有很多相似之处,但是:

(1)接口中不能有构造方法。

(2)接口中没有普通成员变量,只有常量。

(3)接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

(4)接口中的抽象方法类型只能是public类型的,默认是public abstract类型。

(5)接口中不能包含静态方法。

(6)抽象类和接口中都可以包含静态成员变量。但接口中定义的变量只能是public static final类型,并且默认为public static final 类型。

(7)一个类可以实现多个接口,但只能继承一个类。

Java学习5之接口的更多相关文章

  1. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  2. java学习——JDK1.8接口和实现类

    Java 8 新特性:接口的静态方法和默认方法 https://blog.csdn.net/sun_promise/article/details/51220518 接口的默认方法和静态方法 http ...

  3. java学习面向对象之接口

    上一节当中我们说道抽象类,抽象类当中的方法可以是抽象的也可以是非抽象的,那么当抽象类中所有方法都是抽象的时候,我们就可以把它重新定义为接口.代码示例: abstract class Animal { ...

  4. Java学习笔记 07 接口、继承与多态

    一.类的继承 继承的好处 >>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性 继承的基本思想 >>基 ...

  5. java学习之(接口)

    使用接口 接口不能用于创建实例,但接口可以用于声明引用类型变量.当使用接口来声明引用类型变量时,这个引用类型变量必须引用到其实现类的对象.除此之外,接口的主要用途就是被实现类实现.归纳起来,接口主要有 ...

  6. Java学习笔记之接口

    一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(Str ...

  7. java学习--抽象类与接口

    一.抽象 在使用抽象类时需要注意几点: 1.抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可. 2.抽象方法必须由子类来进行重写. 3.只要包含一个抽象方法的抽象类,该方 ...

  8. Java学习之List接口

    List接口 List接口的定义如下: public interface List<E>extends Collection<E> 可以发现List接口时Collection接 ...

  9. 1)Java学习笔记:接口和抽象类的异同

    Java接口和抽象类很像,他们有哪些相同点和异同点呢,下面我们做一个小结 相同 ① 都不能被实例化,都位于继承树的顶端,用于被实现或者继承 ② 都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必 ...

  10. Java学习笔记之——接口

    接口(interface)和抽象类 为何要定义接口?------>实现不同的方法 Java的设计思想是单继承和多实现 类:属性和方法的集合,方法围绕着属性转,可以理解为自定义的类型 接口:与类是 ...

随机推荐

  1. yii:高级应用程序搭建数据库的详细流程

    上一章已经把高级应用程序的环境搭配成功,那么下一步就是搭建数据库了. 首先,我们先去创建一个数据库,比如:demo 创建完之后,我们重要的就是将文件中的数据进行一个更新,在www/advancend/ ...

  2. DBMS事务的四大特性

    数据库事务的四大特性分别是:原子性.一致性.隔离性和持久性. 特性 说明 实现 一致性 在一个事务执行之前和执行之后数据库都必须处于一致性状态.假如数据库的状态满足所有的完整性约束,也可以说数据库是一 ...

  3. UVALive 3530 Martian Mining(贪心,dp)

    分析: 对于网格grid[i][j]如果放向上的管道,那么grid[i][k], k>j 就只能放向上的管道了. 那么定义dp[i][j]表示第i行,最后一个放向左的管道是j的最大总矿量. j ...

  4. python_61_装饰器4

    import time def timer(func):#timer(test1) func=test1 def deco(): start_time=time.time() func()#run t ...

  5. el-upload控件一次接口请求上传多个文件

    el-upload组件默认情况下上传多少个文件就会请求多少次上传接口,如何一次上传多个文件而不必多次请求上传接口呢?直接看代码 html <el-upload :action="act ...

  6. 抽屉head部分,hover应用,鼠标放上变色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Datatable 省略显示列中内容,当鼠标放在内容上,悬浮显示全部内容

    第一种方法是网上看到的,没成功,贴出来参考一下 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  8. 用户和用户组以及 Linux 权限管理

    1.从 /etc/passwd 说起 前面的基本命令学习中,我们介绍了使用 passwd 命令可以修改用户密码.对于操作系统来说,用户名和密码是存放在哪里的呢?我们都知道一个站点的用户名和密码是存放在 ...

  9. linux正则表达式企业级深度实践案例2

    [root@redhat~]#  sed  -nr  ' s#([ ^ : ]+)  (: .* :)  (/.*$)#\3\2\1#gp '  /etc/passwd

  10. 【转】Mysql查询语句优化策略

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...