接口

  • 接口
    • 默认方法
  • 接口中的属性(域)
    • 接口
    • 主函数
  • 接口中的方法
  • 实现接口
    • 示例
  • 接口间的继承
    • 示例

接口

Java中,接口使用interface关键字来声明,接口中可以含有变量和方法。如:

public interface Instrument {void play();String what();void adjust();
}

同抽象类一样,接口也不能进行实例化,而只能声明接口变量引用实现了接口的类对象。

// 实例化
Instrument instance = new Instrument();//错误的
// 声明接口变量
Instrument instance;// 可以
instance = new InstrumentImpl();// 引用实现了接口的类对象

默认方法

可以为接口的方法提供一个默认实现,但必须用 default 修饰符对方法进行标记。

public interface Instrument {int AIN=1;void play();String what();void adjust();default void say(){System.out.println("默认实现");}
}

当一个类实现该接口时,如果不覆盖say方法,那么该类对象就会使用默认实现。

接口中的属性(域)

但是要注意,接口中的任何域都会被自动隐式地指定为public static final变量,也就是静态常量(并且只能是public static final的域)。即使没有写权限访问修饰,编译器也会自动指定为public,而不是包访问权限。

接口

package ch6;
public interface Instrument {int aValue=1;void play();String what();void adjust();
}

主函数

package ch7;import ch6.Instrument;public class IntrumentTest {public static void main(String[] args) {System.out.println(Instrument.aValue);}
}

在不同包中,使用Instrument.aValue能够访问就说明,Instrument.aValue的访问权限不是包访问权限,而是public的。
前面所说的意思就是,接口中绝不能含有实例域,只能拥有常量,可以把接口看成是没有实例域的抽象类。由此带来的影响就是,接口中的域需要在声明的同时就进行初始化,因为接口没有构造方法,所以final类型的域就不能在构造器初始化了。

接口中的方法

而接口中的方法都会被隐式地指定为public abstract方法,且只能是public abstract方法,这是由编译器保证的。也就是说,接口中的方法必须都是抽象方法,这么说或许有点不准确。因为在JDK1.8中,接口里可以有静态方法,也可以包含嵌套类但是没有构造方法,接口里的静态方法必须要有方法体。该静态方法不需要在子类中被实现(因为在接口中就已经实现了)。值得注意的是,在实现接口中的方法时,就必须把方法声明成public的,否则编译器将认为这个方法的访问属性是包可见性。

实现接口

要让一个类遵循某个特定的接口,需要使用implements关键字。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。而对于遵循某个接口的抽象类,可以不实现或部分实现该接口中的抽象方法。另外,接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法。

示例

package ch6;import java.time.LocalDate;
// 假设根据雇员的薪水进行比较
public class Employee implements Comparable<Employee>{private String name;private double salary;private LocalDate hireDay;public Employee(){}public Employee(String n, double s, int year, int month, int day){name = n;salary = s;hireDay = LocalDate.of(year, month, day);}// 按byPercent%加薪public void raiseSalary(double byPercent){double raise = salary * byPercent / 100;salary += raise;}// 按照工资排序@Overridepublic int compareTo(Employee obj) {if(this.salary > obj.salary){return 1;// 大于则返回正数}else if(this.salary < obj.salary){return -1;// 小于则返回负数}else{return 0;// 相等则返回0}} @Overridepublic String toString() {return "name : "+name+",salary :"+salary+",hireDay :"+hireDay;}
}
package ch6;import java.util.Arrays;public class InterfaceEmployeeTest {public static void main(String[] args) {Employee emp1 = new Employee("zhao",5000,2020,5,5);Employee emp2 = new Employee("qian",4000,2020,4,4);Employee emp3 = new Employee("sun",3000,2020,3,3);Employee emp4 = new Employee("li",2000,2020,2,2);Employee emp5 = new Employee("zhou",1000,2020,1,1);Employee[] emps = new Employee[]{emp1,emp2,emp3,emp4,emp5};// 排序Arrays.sort(emps);for(Employee e: emps){System.out.println(e.toString());}}
}

接口间的继承

接口之间的继承,同样使用extends关键字来声明,但是有点区别于具体类或者抽象类的继承,接口可以同时继承好几个接口(多重继承)。所以从这个角度看,接口就是为了弥补Java不能多重继承的缺点,这是Java中唯一可以多重继承的地方,而具体类或抽象类只能继承一个类。这点需要注意一下。

示例

interface Monster{void menace();
}
interface Lethal{void kill();
}
interface Vampire extends Monster,Lethal{void drinkBlood();
}

接口与interface关键字相关推荐

  1. java接口关于interface关键字

    http://it.100xuexi.com/view/otdetail/20120613/328a3769-a63f-4a7d-9d79-f83ce5e65ca5.html 转载于:https:// ...

  2. java接口的关键字_Java 接口 interface关键字

    1.概念:一种特殊的类,有全局常量和公共方法组成 定义接口用interface关键字 2.语法: //中括号"[ ]"的含义:你可继承父接口,也可不继承,是可选的 [修饰符] (a ...

  3. 面向对象编程语言中的接口(Interface)

    在大多面向对象的编程语言中都提供了Interface(接口)的概念.如果你事先学过这个概念,那么在谈到"接口测试"时,会不会想起这个概念来!?本篇文章简单介绍一下面向对象编程语言中 ...

  4. C# 接口(Interface)

    接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 接口定义了属性.方法和事件,这些都是 ...

  5. 第二章:Java面向对象:抽象(abstract)类、模板方法设计模式、接口(interface)、关键字-implements(实现)、代理模式

    package com.atguigu.java; /** Abstract关键字的使用:* 1.abstract:抽象的* 2.abstract可以用来修饰:类.方法* * 3.abstract 修 ...

  6. [Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别

    版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 接口(Interface) 是抽象方法的集合,接口通常以interface来声明. 一个类通过继承接口的方式,从而来继承接口的抽象 ...

  7. 抽象类(abstract class)和接口(Interface)的区别

    抽象类(abstract class)和接口(Interface)的区别 前言 抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予 ...

  8. 1.12 接口(Interface)的定义和实现

    抽象类是从多个类中抽象出来的模板,如果将这种抽象进行的更彻底,则可以提炼出一种更加特殊的"抽象类"--接口(Interface). 接口是 Java 中最重要的概念之一,它可以被理 ...

  9. Java里的接口的interface 简单介绍.

    这是写给我自己和我这种初学者看的. Java作为1个强面向对象语言,  基本上所有东西(成员和方法)都是写在class(类)里面的. 但是也存在一种与class平行的东西, 它就是interface ...

  10. java怎么给类中的私有变量赋值_Java学习笔记分享 如何理解接口抽象类和关键字...

    不知不觉中,千锋重庆学习Java已经半个月了,同学们感觉受益匪浅.有一个同学本来是软件编程专业基础却是意外的差,什么标识符.变量的命名规则.方法的定义.数组.面向对象的封装.继承.多态,还有接口.抽象 ...

最新文章

  1. 如何安装树莓派摄像头
  2. iOS开发-面试总结(九)
  3. golang执行linux命令
  4. 博弈论笔记:不完全信息与声誉
  5. 研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...
  6. 年度总结、下年计划不会做?教给你一个一招致胜的方法
  7. stm32 isp下载官方软件android_OpenCanvas免费版下载_OpenCanvas绘图软件官方版下载7.0.25...
  8. Android手势的识别
  9. wav文件头修复_windows文件夹分析(xp版,网络整理)
  10. PHPer 面试指南-扩展阅读资源整理
  11. apache配置防盗链
  12. div contenteditable 换行_contenteditable跟style标签可真是天生一对
  13. 背景复合写法(HTML、CSS)
  14. [安全攻防进阶篇] 八.那些年的熊猫烧香及PE病毒行为机理分析
  15. python3的字符串操作
  16. 统计用区划代码和城乡划分代码
  17. python做var模型_python中VAR模型的条件预测
  18. 苹果CMS V10后台登录验证码错误解决方法
  19. maya表情blendshape_【UE4】人物角色MorphTarget(Blendshape) 面部表情制作方案
  20. Arduino 多LED灯控制

热门文章

  1. java 字符流异常处理_IO字符流9jdk7和jdk9中流的异常的处理
  2. mysql concat算法_MySQL CONCAT()用法及代码示例
  3. python怎么设置图片_python 调整图片亮度的示例
  4. arraylist 初始化_ArrayList 和 LinkedList 哪个更占空间?
  5. hashmap扩容_我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?
  6. java c 泛型 区别_为什么Javac会抱怨与类的类型参数无关的泛型?
  7. winform 图片压缩大小为原图的一半_图片压缩指定大小?!这款神奇的工具有必要了解一下...
  8. Java编程:多路查找树
  9. 403保护网站服务器,HTML5服务器禁止访问403错误动画
  10. 论文笔记_S2D.69_用于 LiDAR 里程计和建图的泊松曲面重建