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. spring中使用@value注入static静态变量

    @Value("${meeting.private_key}")public static String PRIVATE_KEY;发现没有数据,null 分析 Spring是不能直 ...

  2. BehaviorTree.CPP行为树BT的入门(二)

    节点与树 用户必须创建自己的ActionNodes和ConditionNodes(LeafNodes):该库可帮助您轻松地将它们组成树. 将LeafNodes视为组成复杂系统所需的构建块. 根据定义, ...

  3. CF1575G GCD Festival

    \(\sum\sum gcd(i,j) \times gcd(a_i,a_j)\) 考虑枚举这个 \(gcd(i,j)\) . \(\sum_d \varphi(d)\sum_{i|d}\sum_{j ...

  4. PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台

    ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...

  5. 如何反向推断基因型文件中的参考碱基(REF/ALT)?

    目录 需求 解决 方法一 方法二 需求 客户随手丢来一个基因型文件,类似于hapmap格式,只是少了中间多余的那几列,像这种类hapmap格式文件,往往是芯片数据. 这样的数据因为缺乏等位基因:参考碱 ...

  6. 基本绘图函数:plot的使用

    注意:"##"后面是程序输出结果 例如: par("bg") # 命令 ## [1] "white" # 结果 基本绘图函数: plot:散 ...

  7. Linux文件系统属性和权限概念详解(包含inode、block、文件权限、文件软硬链接等)

    Linux中的文件属性 ls -lih 包括:索引节点(inode),文件类型,权限属性,硬链接数,所归属的用户和用户组,文件大小,最近修改时间,文件名等等 索引节点:相当于身份证号,系统唯一,系统读 ...

  8. 【题解】洛谷P1001 A+B Problem

    第一篇博客,献给2020年的残夏. 静听8月的热情与安宁,在竞赛中的时光如白驹过隙. 也不惧未知的风雨,努力向着既往的通途. 题目地址 https://www.luogu.com.cn/problem ...

  9. absent, absolute

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

  10. flink03-----1.Task的划分 2.共享资源槽 3.flink的容错

    1. Task的划分 在flink中,划分task的依据是发生shuffle(也叫redistrubute),或者是并行度发生变化 1.  wordcount为例 package cn._51doit ...