1、什么是接口?

类比抽象类,把功能或者特性类似的一类 抽象的更彻底,可以提炼出更加特殊的“抽象类”----接口

2、如何定义接口

语法:

 [修饰符] interface 接口名 {

  N个常量定义...

  N个抽象方法定义...

  N个内部类、接口、枚举定义....

  N个私有方法,默认方法或者类方法定义

}

修饰符一般为public 即可以跨包访问,绝大多数情况接口都是需要跨包访问的

3、接口特性注意:

  1. 接口修饰符public可以省略,省略后不能在包外访问,所以99%+ 实际应用中都是需要public

  2. 不支持变量定义,定义出来的变量都是常量。也就是说默认都是被隐藏的static、final修饰的类变量。

    如下两行代码效果一样

    int maxNum = 10;
    public static final int maxNum = 10;
  3. 接口中定义的方法,认都是public (公开)、abstract  (抽象) 的。必须被类实现,

  4. java9接口中还可以定义默认方法。当实现类中没有重写方法的话,调用的就是这个默认方法。

  5. java9接口中还可以使用private的方法。这些private 的方法就是给默认方法充当工具方法的。

示例:图形接口

package com.zmd.study.interface_example;

/**
* @ClassName Shape
* @projectName: object1
* @author: Zhangmingda
* @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承
* date: 2021/3/30.
*/
public interface Shape {
/**
* 接口中定义的变量 默认为常量:自动被public static final 修饰
* 如下mxNum变量的定义等于:public static final int maxNum = 10;
*/
int maxNum = 10;
//public static final int maxNum = 10;
/**
* 获取平面图形的类型
*/
public abstract String getType(); /**
* 获取平面图形的周长
*/
public abstract double getPerimeter();
}

三角形类实现接口

package com.zmd.study.interface_example;

/**
* @ClassName Triangle
* @projectName: object1
* @author: Zhangmingda
* @description: 类实现了接口功能,使用implements关键字
* date: 2021/3/30.
*/
public class Triangle implements Shape {
/**
* 三角形的三边长类型定义
*/
private double a;
private double b;
private double c; /**
* 构造方法,创建三角形实例必须提供三边长度
*/
public Triangle(double a, double b, double c) {
/**
*@params [a, b, c] 三角形三边长度
*@return null
*@创建时间 2021/3/30
*/
if(a+b < c || a+c < b || b+c < a){
System.out.println("Failed!:三角形的两边之和必须大于第三边");
return;
}
this.a = a;
this.b = b;
this.c = c;
} @Override
public String getType() {
if(a+b < c || a+c < b || b+c < a){return "未知图形";}
return "三角形";
} @Override
public double getPerimeter() {
return a + b + c;
} }

测试运行

package com.zmd.study.interface_example;

/**
* @ClassName InterfaceTest
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/3/30.
*/
public class InterfaceTest {
public static void main(String[] args) {
Shape triangle = new Triangle(3,4,5);
System.out.println(triangle.getType());
System.out.println(triangle.getPerimeter());
}
}
/**
输出:
三角形
12.0
*/

4、接口的默认方法 default 修饰 (java 9新特性)

实现类中没有重写方法的话,调用的就是这个默认方法。

如上Shape.java中 增加default修饰的方法

package com.zmd.study.interface_example;

/**
* @ClassName Shape
* @projectName: object1
* @author: Zhangmingda
* @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承
* date: 2021/3/30.
*/
public interface Shape {
...同上省略
/**
* 定义一个默认方法;如果实现接口的类没有写这个方法,也可以使用
*/
default public void printMe(){
System.out.println("我是:" + getType() + "我的周长是:" + getPerimeter());
}
}

三角形类同上:Triangle.java

测试类实例化三角形Triangle()调用printMe()方法

public class InterfaceTest {
public static void main(String[] args) {
Shape triangle = new Triangle(3,4,5);
System.out.println(triangle.getType());
System.out.println(triangle.getPerimeter());
triangle.printMe();
}
}
/**
三角形
12.0
我是:三角形我的周长是:12.0
/*

5、接口中的private的方法(java9新特性)

作用:完全是给default 默认方法充当工具方法,当有多个default方法有共同的代码的时候,可以单独列出来。

package com.zmd.study.interface_example;

/**
* @ClassName Shape
* @projectName: object1
* @author: Zhangmingda
* @description: 定义一个形状接口,用于三角形或其它图形类实现功能,或者子接口继承
* date: 2021/3/30.
*/
public interface Shape {
...省略如上代码... /**
* 定义一个默认方法;如果实现接口的类没有写这个方法,也可以使用
*/
default public void printMe(){
beforPrintMe();
System.out.println("我是:" + getType() + "我的周长是:" + getPerimeter()); }
/**
* java9 特性:接口可以用private 私有的方法,给default方法充当工具方法
*/
private void beforPrintMe(){
System.out.println("beforPrintMe()....干了一些活");
}
}

三角形类同上:Triangle.java

测试类实例化三角形Triangle()调用printMe()方法

package com.zmd.study.interface_example;

/**
* @ClassName InterfaceTest
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/3/30.
*/
public class InterfaceTest {
public static void main(String[] args) {
Shape triangle = new Triangle(3,4,5);
System.out.println(triangle.getType());
System.out.println(triangle.getPerimeter());
triangle.printMe();
}
}
/**
三角形
12.0
beforPrintMe()....干了一些活
我是:三角形我的周长是:12.0
*/

6、子接口定义(接口的继承)

语法:

 [修饰符] interface 接口名 extends 父接口,父接口2...{

  ....同上

}

示例:

动物接口、人接口、女人接口;女人接口继承动物和人。wife 类实现女人接口。wife类就具有如上接口的default方法

动物接口

package com.zmd.study.interface_example;

public interface Animal {
default void yell(){
System.out.println("动物 啊....叫喊!!!");
}
}

人接口

package com.zmd.study.interface_example;

public interface Person {
default void makeLove(){
System.out.println("Person makeLove 啊!...哦...啊...");
}
}

女人接口

package com.zmd.study.interface_example;

public interface Woman extends Animal, Person{
}

wife类

package com.zmd.study.interface_example;
public class Wife implements Woman {
}

测试类

package com.zmd.study.interface_example;

public class InterfaceTest {
public static void main(String[] args) {
Wife wife = new Wife();
wife.yell();
wife.makeLove();
}
}
/**
动物 啊....叫喊!!!
Person makeLove 啊!...哦...啊...
*/

7、一个类实现多个接口

用一个学生类实现6中的Animal、Person接口。并增加自己的功能

学生类Student.java

package com.zmd.study.interface_example;

public class Student implements Animal,Person  {
public void study(){
System.out.println("学习");
}
}

测试类

package com.zmd.study.interface_example;

/**
* @ClassName InterfaceTest
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/3/30.
*/
public class InterfaceTest {
public static void main(String[] args) {
Student student = new Student();
student.study();
student.yell();
student.makeLove(); }
} /**
学习
动物 啊....叫喊!!!
Person makeLove 啊!...哦...啊...
*/

其他类似案例场景

接口实现业务逻辑课插拔,更换数据库直接改配置文件即可。

Java面向对象之 接口: [修饰符] interface 接口名 {...};子接口:[修饰符] interface 接口名 extends 父接口,父接口2...{...}的更多相关文章

  1. JavaSE入门学习20:Java面向对象之接口(interface)(一)

    一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...

  2. Java面向对象之接口interface 入门实例

    一.基础概念 (一)接口可以简单的理解为,是一个特殊的抽象类,该抽象类中的方法都是抽象的. 接口中的成员有两种:1.全局常量 2.抽象方法 定义接口用关键字interface,接口中的成员都用固定的修 ...

  3. java自学第3期——继承、多态、接口、抽象类、final关键字、权限修饰符、内部类

    一.继承: 关键字extends /* 定义一个父类:人类 定义父类格式:public class 父类名称{ } 定义子类格式:public class 子类名称 extends 父类名称{ } * ...

  4. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  5. java 面向对象(二十四):interface:接口

    interface:接口1.使用说明: 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能 ...

  6. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  7. Java面向对象 第5节 抽象类和接口

    一.抽象类和抽象方法 区分抽象方法和普通方法1)当一个方法被abstract修饰时,该方法成为抽象方法2)抽象类所在的类必须定义为抽象类3)抽象方法不会有具体的实现,而是在抽象类的子类中通过方法重写进 ...

  8. Java面向对象(Eclipse高级、类与接口作为参数返回值)

      面向对象 今日内容介绍 u Eclipse常用快捷键操作 u Eclipse文档注释导出帮助文档 u Eclipse项目的jar包导出与使用jar包 u 不同修饰符混合使用细节 u 辨析何时定义变 ...

  9. Java面向对象进阶篇(抽象类和接口)

    一.抽象类 在某些情况下,父类知道其子类应该包含哪些方法,但是无法确定这些子类如何实现这些方法.这种有方法签名但是没有具体实现细节的方法就是抽象方法.有抽象方法的类只能被定义成抽象类,抽象方法和抽象类 ...

随机推荐

  1. 撸了一个可调试 gRPC 的 GUI 客户端

    前言 平时大家写完 gRPC 接口后是如何测试的?往往有以下几个方法: 写单测代码,自己模拟客户端测试. 可以搭一个 gRPC-Gateway 服务,这样就可以在 postman 中进行模拟. 但这两 ...

  2. spring通过注解注册bean的方式+spring生命周期

    spring容器通过注解注册bean的方式 @ComponentScan + 组件标注注解 (@Component/@Service...) @ComponentScan(value = " ...

  3. Spring-boot -Web开发

    1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3).自己编写业务代码: 文件名的功能 x ...

  4. logname

    logname命令用来显示用户名称. 语法 logname(选项) 选项 --help:在线帮助: --vesion:显示版本信息.

  5. javaSE中级篇3——集合体系(另外一种存储容器)——更新完毕

    集合还是一种工具,所以它们的包都在java.util包下 1.集合的整个体系结构(是需要掌握的体系,完全体系不是这样) 对图中所说的 序和重复 这两词的说明: 序:指的是添加进去的元素和取出来的元素 ...

  6. absent, absolute

    absent 1. A teacher asked in a class who killed Abraham Lincoln. A blonde said "It wasn't me, I ...

  7. 乱序拼图验证的识别并还原-puzzle-captcha

    一.前言 乱序拼图验证是一种较少见的验证码防御,市面上更多的是拖动滑块,被完美攻克的有不少,都在行为轨迹上下足了功夫,本文不讨论轨迹模拟范畴,就只针对拼图还原进行研究. 找一个市面比较普及的顶像乱序拼 ...

  8. Docker学习(二)——Docker容器使用

    Docker容器使用 1.Docker客户端       命令docker可以查看到Docker客户端的所有命令选项.       命令docker command --help更深入的了解指定的Do ...

  9. d3入门二-常用 方法

    CSV 版本6.5.0 这里的data实际上是csv中的一行数据 d3.csv("static/data/dept_cpu.csv",function (data) { conso ...

  10. 图的存储(Java)以及遍历

    // 深搜 private void dfs(int v) { visited[v] = true; System.out.print(v+" "); for (int i = 0 ...