Java面向对象之 接口: [修饰符] interface 接口名 {...};子接口:[修饰符] interface 接口名 extends 父接口,父接口2...{...}
1、什么是接口?
类比抽象类,把功能或者特性类似的一类 抽象的更彻底,可以提炼出更加特殊的“抽象类”----接口
2、如何定义接口
语法:
[修饰符] interface 接口名 {
N个常量定义...
N个抽象方法定义...
N个内部类、接口、枚举定义....
N个私有方法,默认方法或者类方法定义
}
修饰符一般为public 即可以跨包访问,绝大多数情况接口都是需要跨包访问的
3、接口特性注意:
接口修饰符public可以省略,省略后不能在包外访问,所以99%+ 实际应用中都是需要public
不支持变量定义,定义出来的变量都是常量。也就是说默认都是被隐藏的static、final修饰的类变量。
如下两行代码效果一样
int maxNum = 10;
public static final int maxNum = 10;接口中定义的方法,认都是public (公开)、abstract (抽象) 的。必须被类实现,
java9接口中还可以定义默认方法。当实现类中没有重写方法的话,调用的就是这个默认方法。
- 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...{...}的更多相关文章
- JavaSE入门学习20:Java面向对象之接口(interface)(一)
一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...
- Java面向对象之接口interface 入门实例
一.基础概念 (一)接口可以简单的理解为,是一个特殊的抽象类,该抽象类中的方法都是抽象的. 接口中的成员有两种:1.全局常量 2.抽象方法 定义接口用关键字interface,接口中的成员都用固定的修 ...
- java自学第3期——继承、多态、接口、抽象类、final关键字、权限修饰符、内部类
一.继承: 关键字extends /* 定义一个父类:人类 定义父类格式:public class 父类名称{ } 定义子类格式:public class 子类名称 extends 父类名称{ } * ...
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
- java 面向对象(二十四):interface:接口
interface:接口1.使用说明: 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能 ...
- Java面向对象:接口
Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...
- Java面向对象 第5节 抽象类和接口
一.抽象类和抽象方法 区分抽象方法和普通方法1)当一个方法被abstract修饰时,该方法成为抽象方法2)抽象类所在的类必须定义为抽象类3)抽象方法不会有具体的实现,而是在抽象类的子类中通过方法重写进 ...
- Java面向对象(Eclipse高级、类与接口作为参数返回值)
面向对象 今日内容介绍 u Eclipse常用快捷键操作 u Eclipse文档注释导出帮助文档 u Eclipse项目的jar包导出与使用jar包 u 不同修饰符混合使用细节 u 辨析何时定义变 ...
- Java面向对象进阶篇(抽象类和接口)
一.抽象类 在某些情况下,父类知道其子类应该包含哪些方法,但是无法确定这些子类如何实现这些方法.这种有方法签名但是没有具体实现细节的方法就是抽象方法.有抽象方法的类只能被定义成抽象类,抽象方法和抽象类 ...
随机推荐
- postman自动调用获取token
Postman不光支持单次请求,还支持环境变量.全局变量.集合变量 本文使用Collection Variable Collection 如下图可以点击Collection然后可以添加请求和文件夹,以 ...
- Arc123 D
Arc123 D 很好考场降智了. 感觉\(D\)比\(C\)好做多了. 考虑\(C_i = A_i - B_i\),那么有\(C_{i + 1} \leq C_i,B_i \leq B_{i + 1 ...
- 洛谷 P3647 [APIO2014]连珠线(换根 dp)
题面传送门 题意: 桌子上有 \(1\) 个珠子,你要进行 \(n-1\) 次操作,每次操作有以下两种类型: 拿出一个新珠子,并选择一个桌子上的珠子,在它们之间连一条红线 选择两个由红线相连的珠子 \ ...
- 使用BRAKER2进行基因组注释
来自:https://www.jianshu.com/p/e6a5e1f85dda 使用BRAKER2进行基因组注释 BRAKER2是一个基因组注释流程,能够组合GeneMark,AUGUSTUS和转 ...
- 【Python小试】使用列表解析式简化代码
列表解析式的好处: 代码简洁 可读性强 运行快 示例 来自<Python编程>中的一个例子:同时投掷两颗面数不同的骰子(如一个6面的D6和一个10面的D10)n次,统计两个骰子点数之和,并 ...
- 【蛋白质基因组】Proteogenomics方法介绍及分析思路
概念 利用蛋白质组学数据,结合基因组数据(DNA).转录组数据(RNA)来研究基因组注释问题,被称为蛋白质基因组学."蛋白质基因组学"一词由Jaffe 等于2004 年首次提出,作 ...
- nginx负均
Nginx负载均衡详解 上一篇中我说啦nginx有哪些中负载均衡算法.这一结我就给如果操作配置的给大家做详细说明下. 首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后 ...
- Python添加模块路径
1.用函数临时添加 1 import sys #导入sys模块 2 3 4 sys.path.append(r'/tmp/test') #要用绝对路径 5 print(sys.path) #查看模块路 ...
- acquaint
Interpersonal relationships are dynamic systems that change continuously during their existence. Lik ...
- C语言大小端判定
要判定大小端?需要弄清以下几个问题: 1.当一个变量占多个字节时,变量的指针指向的是低地址 2.什么是大小端? 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 小 ...