1、接口

在抽象类中,抽象方法本质上是定义接口规范,即规定高层类的接口,从而保证所有子类都有相同的接口实现,这样,多态就能发挥出威力。

如果一个抽象类没有字段,所有方法全部都是抽象方法,就可以把该抽象类改写为接口(interface)。在Java中使用interface可以声明一个接口:

// 抽象类Person
abstract class Person {public abstract void run();public abstract String getName();
}
// 将抽象类改写成接口
interface Person {void run();String getName();
}

(1)接口(interface)就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。

(2)接口定义的所有方法默认都是public abstract的,所以这两个修饰符不需要写出来,写不写效果都一样。

(3)接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明抽象类。

(4)接口的所有方法都是抽象方法,接口不能定义实例字段。

当一个具体的class去实现一个interface时,需要使用implement关键字。

注:implement [ˈɪmplɪment] n.工具,器具。interface [ˈɪntəfeɪs] n.界面,接口。

class Student implements Person {   // 使用Student类实现Person接口private String name;public Student(String name) {this.name = name;    }@Override    // 覆写Person接口run()方法public void run() {System.out.println(this.name + " run");    }@Override   // 覆写Person接口getName()方法public String getName() {return this.name;    }
}

在Java中,一个类只能继承自另一个类,不能从多个类继承。而一个类可以实现多个接口

class Student implements Person, Hello {   //实现了两个接口Person和Hello... ...
}

(1)default方法

在接口中,可以定义default方法,将Person接口的run()方法改为default方法:

interface Person {void run();String getName();
}
// 将run()方法改为default方法
interface Person {String getName();default void run() {System.out.println(getName() + " run");}
}

实现类可以不必覆写default方法。default方法的目的是,当需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方才去覆写新增方法。

default方法和抽象类的普通方法是有所不同的,因为interface没有字段,default方法无法访问字段,而抽象类的普通方法可以访问实例字段。

2、接口继承

一个interface可以继承另一个interface,interface继承自interface使用extends,它相当于扩展了接口的方法。

interface Hello {    // 定义Hello接口void hello();
}interface Person extends Hello {  // Person接口继承Hello接口// Person接口实际上有3个抽象方法签名,其中一个来自继承Hello接口void run();String getName();
}

3、抽象类和接口区别

Java的接口特指interface的定义,表示一个接口类型和一组方法签名。而编程接口泛指接口规范,如:方法签名,数据格式,网络接口等

 抽象类和接口区别:

   抽象类(abstract class):

继承:只能extends一个class

字段:可以定义实例字段

抽象方法:可以定义抽象方法

非抽象方法:可以定义非抽象方法

 接口(interface):

继承:可以implements多个interface

字段:不能定义实例字段

抽象方法:可以定义抽象方法

非抽象方法:可以定义default方法

Java接口和接口继承相关推荐

  1. Java中实现接口与继承的区别

    ** Java中实现接口与继承的区别 ** 首先,先来了解一下什么是接口和继承.接口一般是使用interface来定义的.接口定义同类的定义类似,分为接口的声明和接口体,其中接口体由常量定义和方法定义 ...

  2. JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]

    类的继承 Java只支持单继承,不允许多重继承 - 一个子类只能有一个父类 - 一个父类可以派生出多个子类 这里写图片描述 子类继承了父类,就继承了父类的方法和属性. 在子类中,可以使用父类中定义的方 ...

  3. java 接口 实现和继承关系

    一.抽象类 有时候,我们可能想要构造一个很抽象的父类对象,它可能仅仅代表一个分类或抽象概念,它的实例没有任何意义,因此不希望它能被实例化.例如:有一个父类"水果(Fruit)",它 ...

  4. Java中接口的多继承

    我们知道Java的类只能继承一个类,但可以实现多个接口.但是你知道么?Java中的接口却可以继承多个接口.本文就来说一说Java中接口的多继承. 进入主题之前,先扩展一下.Java为什么只支持单继承呢 ...

  5. java 接口可以多继承

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 接口是常量值和方法定义的集合.接口是一种特殊的抽象类. java类是单继承的.classB Exte ...

  6. java接口中多继承的问题

    java中支撑多继承吗? 支持->接口啊 为什么接口支持多继承呢?因为接口中没有方法体!即使可能两个接口中有一样的抽象方法,但是 只会调用子类中覆盖该同样抽象方法的具体方法!不会引起调用的歧义! ...

  7. [转载] Java获取一个类继承的父类或者实现的接口的泛型参数

    参考链接: Java中的接口和继承 泛型的作用就不多介绍了,如果你想具备架构设计能力,那么熟练使用泛型是必不可少的. 不多说了,先定义泛型父类和泛型接口: package cn.zhh; public ...

  8. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...

    六.Java类 1.  Java中用关键字class来创建类. 2.  类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3.  类的定义: [] class [extend ...

  9. java中什么是继承,和继承的接口的关系?

    继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父 ...

  10. Java接口及接口继承

    Java接口 开发工具与关键技术:My Eclipse 10.Java 作者:郑凯丰 撰写时间: 2019年5月2日 修饰符 :public .abstract [修饰符] interface 接口名 ...

最新文章

  1. SAP MM 事务代码RWBE查询库存
  2. 关于ssh远程登录时出现问题的解决方法
  3. vba和python哪个好学-python和vba学哪个
  4. studio-引入外来包
  5. 8086指令(II)
  6. [android] listview入门
  7. ora-00923数据类型不一致_小白学 Python(2):基础数据类型(上)
  8. 基于Weblogic的JNDI数据库连接调优项
  9. document 对象 html文档内容
  10. 知行动手实验室可以用来做什么?
  11. 一文快速探索视频用户网络画像与应用
  12. SOA进入成熟应用阶段仍需时日
  13. RPM软件包管理(安装、卸载、查询、制作)
  14. Linux 系统查看网卡配置信息
  15. c语言第一章复习思维导图
  16. 悟空遥控器 android 5.1,悟空遥控器服务端
  17. Linux的常见问题解答和管理技巧
  18. Opencv实现颜色检测
  19. php怎么控制mp3播放器,简单的C++ MP3播放器类
  20. [python] 使用Jieba工具中文分词及文本聚类概念

热门文章

  1. [ERDAS] 裁剪 拼接 融合 修改指定像素的值
  2. 展架与展板的设计需要哪几个步骤
  3. word设置正文默认字体
  4. 游戏陪玩平台系统中iOS 采集音视频及写入文件的实现
  5. 21.9.15 ActivityThread
  6. 华为畅享20 Pro和OPPO A93s多维度对比,谁更胜一筹?
  7. 今天是我的23岁生日
  8. ReRe插件之——EZWheel
  9. 机器学习算法之贝叶斯算法 2、案例一:鸢尾花数据分类
  10. virbr0怎么关闭_虚拟机中除去虚拟网桥virbr0 | 学步园