Java不支持多重继承,即一个子类只允许拥有一个父类。为了弥补这个不足,Java中的接口可以实现多重继承,一个类可以实现多个接口。

定义和实现接口

接口的定义包括接口声明和接口体两部分。接口体包括属性常量抽象方法。

[public] interface 接口名 {属性常量...抽象方法...}

interface是声明一个接口的关键字,在Java中,接口的属性只允许为静态常量,即static或者final类型,接口中的方法都是未定义的抽象方法。接口中无论是属性还是方法都默认为public类型。
用implements表示实现一个接口,在实现类中要必须实现接口中定义的所有方法并且可以使用接口里面定义的属性常量。此外,一个类可以实现多个接口。
来一个例子:

package Liu;
interface Action {String name = "Liu Yankee";        //默认是public static final类型的属性常量public void walk();public void run();
}
class Person implements Action {public Person() {}private int age;      //定义自己的私有属性private int birthDate;//实现接口的抽象方法walk()public void walk() {System.out.println(name + " is walking!");}//实现接口的抽象方法run()public void run() {System.out.println(name + " is running!");}//定义与接口无关的与类相关的方法public void love() {System.out.println(name + "can fall in love with a beautiful girl!");}
}
//测试类
public class text5 {public static void main(String[] args) {// TODO Auto-generated method stubAction  man = new Person();man.run();man.walk();}}

1)接口是一个引用类型
2)接口是某种特征的约定
3)接口里面的所有方法自动为public abstract类型
4)通过接口可以实现不相关类的相同行为而不需要考虑这些类之间的层次关系,从而在一定意义上实现了多重继承
5)通过接口可以指明多个类需要实现的方法
6)通过接口可以了解对象的交互界面,而不需要了解对象所对应的类

接口的特性

首先必须要了解接口不同于类的一些特性
1)接口中的方法可以有参数列表和返回类型,但是不能有任何方法体实现
2)接口中可以包含属性,但是会被隐式声明为static 和final类型,存储在该接口的静态存储区里面,而不属于该接口
3)接口中的方法被声明为public或者不声明,但结果都会按照public类型处理
4)如果没有实现接口中的所有方法那么创建的仍然是一个接口,即接口可以继承接口(使用extends关键字),在继承时,父接口传递给子接口只是方法说明,而不是具体实现
5)一个接口可以有一个以上的父接口,一个类可以在继承父类的同时实现多个接口,即实现多重继承

接口与抽象类的区别

抽象类作为所有子类的标准有点类似于模板,所有子类只能在其格式范围内修改并补充。Java接口和Java抽象类代表的是抽象类型,是抽象层的具体实现。面向对象编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须正确的使用接口和抽象类作为系统结构层次上的顶层,进行面向对象或者面向接口的编程。
(1)接口和抽象类的最大一个区别是:抽象类可以提供部分已经实现的方法,但是接口所有的方法都是抽象的

//使用接口计算长方体的面积
package Liu;
//定义一个接口
interface Fiure {double calculateArea();    //抽象方法calculateArea()void showArea();           //抽象方法showArea()
}
class Rectangular implements Fiure {private double length;      //私有属性private double width;     //私有属性//带参数的构造方法public Rectangular(double length, double width) {this.length = length;this.width = width;}//接口抽象方法实现public double calculateArea() {double area = this.length * this.width;return area;}//接口抽象方法实现public void showArea() {double Area = calculateArea();System.out.println("此图形的面积为:" + Area);}
}
//测试类
public class text6 {public static void main(String[] args) {//实现接口Fiure pFiure = new Rectangular(5.6, 6.9);pFiure.showArea();}}
此图形的面积为:38.64

由程序可以知道,接口的方法在其实现类中必须全部被实现,否则无法成功通过编译

(2)抽象类作为公共的父类,为子类的扩展提供基础,包括属性和行为上的扩展。而接口不重视属性,只重视方法,使得子类可以自由的填补或者扩展接口所定义的方法
(3)一个抽象类的实现只能由这个抽象类的子类给出,实现抽象类以继承为基础,而一个类可以实现任意多个接口

package Liu;
//接口Useleg
interface Useleg {void run();void walk();}
//接口Usemouth
interface Usemouth {void speak();void eat();}
//接口Useear
interface Useear {void hearMusic();}
//接口USeeye
interface Useeye {void seeFilm();}
//Person类实现多个接口
class Person implements Useleg, Usemouth, Useear, Useeye {String name;int age;String address;String ID;public void run() {System.out.println("I am running!");}public void walk() {System.out.println("I am walking!");}public void speak() {System.out.println("I am speaking!");}public void eat() {System.out.println("I am eating!");}public void hearMusic() {System.out.println("I am listening to music!");}public void seeFilm() {System.out.println("I am seeing a film!");}}
//测试类
public class text7 {public static void main(String[] args) {//实现Usemouth接口Usemouth person = new Person();person.eat();person.speak();}}
I am eating!
I am speaking!

实现多个接口,每个接口名在implements关键字后面用逗号隔开,同时具有多个接口所定义的行为,而且必须实现所有抽象方法。
技巧:抽象类侧重属性,接口侧重方法,在实际编程中,可以将接口放在最底层,在抽象类中实现接口的各个方法,进而让子类继承实现。

定义接口interface
...
//抽象类实现接口
abstract class [类名] implements [接口名] {...}
//子类继承抽象类
class [类名] extends [抽象类]

接口和接口实现类,接口与抽象类相关推荐

  1. php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别

    /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候 ...

  2. java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗

    一.简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法:(不包括普通方法) 普通类继承接口,重写所有接口方法.(不包括default关键字修饰的方法) 详解见下: 普通类继承,并非一定要重写 ...

  3. Java11-day02【多态(成员访问、多态转型、内存图解)、抽象类(成员特点)、接口(成员特点)、类和接口的关系、抽象类和接口的区别、综合案例】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

  4. abstract类_012 JAVA 抽象类、接口、String类的基础了解

    1.抽象方法和抽象类 抽象方法:使用abstract修饰的方法,没有方法体,只有声明.抽象方法可以当做是一种规范,让子类必须实现. 注意: 1.抽象方法没有方法体,只能以分号结尾 2.抽象方法只能声明 ...

  5. java 抽象类 普通类_java的抽象类,接口,普通类是否可以直接NEW,并且复写方法?

    我看那个内部匿名类的写法(代码1),接口可以直接new,代码2中抽象类可以直接NEW,那是否可以直接 new 一个普通类然后复写其中方法比如代码3? 代码1 interface Person { pu ...

  6. java类接口的区别_java抽象类和接口区别

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  7. Java 类和对象——抽象类、接口、Object类

    本文章继续来介绍类和对象的知识.重点介绍抽象类和接口,Object类只做简单介绍. 现在,定义一个Shape类(形状类),当不同的对象去调用的时候,就会画出不同的图形,使用圆这个对象去调用,就会画出⚪ ...

  8. java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处

    C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...

  9. java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答

    基本语法区别 Java中接口和抽象类的定义语法分别为interface与abstract关键字. 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为 ...

  10. C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态

    C#基础--类/接口/成员修饰符,多态.重载.重写,静态和非静态 类/接口/成员修饰符 C#修饰符---接口: 接口默认访问符是internal 接口的成员默认访问修饰符是public C#修饰符-- ...

最新文章

  1. All-in-One 模式安装 KubeSphere 异常问题记录
  2. [leetcode] Container With Most Water
  3. 【考研保研直通车】C9高校考研真题
  4. Hibernate-级联操作
  5. javaIo流实际应用
  6. php invalid access,PHP出错消息PHP has encountered an Access Violation at XXXXXXXX 如何解决?...
  7. usb2.0、usb3.0、usb3.1、type-c 接口含义与区别
  8. 正向代理与反向代理的理解
  9. 第2章[2.1] 开发模式及快速测试方式
  10. 安装nodejs出现Invalid drive: f:\的解决办法
  11. 微博登录设备有python_Python搜寻器如何登录新浪微博并获取内容?
  12. C语言if语句中常见的问题
  13. 北京科技大学C语言锐格答案,北京科技大学软件课程设计作业.pdf
  14. list object has no attribute ZScan_【恋爱体验】No.112丨大二男生,河南南阳,身高178,喜欢篮球、羽毛球、兵乓球、足球.........
  15. Python 自动化操作 Excel 绘制条形图!
  16. 搜狗号正式上线广告收益功能!
  17. 三星为企业服务器开发高性能PCIe 5.0固态硬盘;阳狮集团升任张珲杰为明思力中国董事总经理 | 全球TMT...
  18. 关于企业服务总线ESB
  19. java面试题:2年工作经验java简历包装,面试为什么公司不通过
  20. 千呼万唤,小灰的新书出版了!

热门文章

  1. “测温枪”到底是怎样测出你的温度的?
  2. SpringBoot SpringSecurity知识点
  3. JSONObject.put 覆盖原有数据,解决办法
  4. httpclient默认配置导致rt飙高
  5. 【Qt】 Fractal Designer 5.3 - Help(中文版)
  6. 【Qt】 Fractal Designer 5.2 - Help(中文版)
  7. 编程之美1.3-翻烙饼问题
  8. 投资日记 11.2中心从科技板逐渐转换到食品版块
  9. 使用RecyclerView实现瀑布流,仿照小红书,解决顶部留白、卡顿等问题
  10. CHIL-SQL-NULL 值