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对elasticsearch接口调用
post 新增 get 查询 put更新 post http://127.0.0.1:9200/index4/type1 {"node":0} { "_index&quo ...
- 分布式事务(3)---强一致性分布式事务Atomikos实战
分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(4)---最终一致性方案之TCC 前面介绍强一致性分布式解决方案,这里用Atomikos框架写一个实战的dem ...
- abort, about
abort 变变变: abortion:堕胎 abortionist:(非法)做堕胎手术的,不是所有的ist都是scientist, "All that glitters is not go ...
- Windows Server 2016域控制器升级到Windows Server 2022遇到的问题记录Fix error 0x800F081E – 0x20003
1. 非域控服务器升级 将两台Web服务器和数据库服务器(Windows Server 2016, 2019)成功升级至到Windows Server 2022,非常顺利,一次成功. 直接在Windo ...
- stlink 无法再keil中识别 按下复位键可以识别
最近遇到一个很是头痛的问题 本来板子是好好的,就是从公司带回的家里 然后再次用stlink烧写程序的时候就出现了问题: 但是查看电脑端,上面是有stlink的 也就是电脑是好的, 我立刻又试了一下家中 ...
- Oracle中常用的系统函数
本文主要来梳理下Oracle中的常用的系统函数,掌握这些函数的使用,对于我们编写SQL语句或PL/SQL代码时很有帮助,所以这也是必须掌握的知识点. 本文主要包括以下函数介绍:1.字符串函数2. 数值 ...
- Linux学习 - 变量测试与内容替换
变量置换方式 变量y没有设置 变量y为空 变量y有值 x=${y-新值} x=新值 x空 x=$y x=${y:-新值} x=新值 x=新值 x=$y x=${y+新值} x空 x=新值 x=新值 x ...
- 【Java多线程】ExecutorService和ThreadPoolExecutor
ExecutorService Java.util.concurrent.ExecutorService接口代表一种异步执行机制,它能够在后台执行任务.因此ExecutorService与thread ...
- AOP切入点的配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- jdk1.7源码之-hashMap源码解析
背景: 笔者最近这几天在思考,为什么要学习设计模式,学些设计模式无非是提高自己的开发技能,但是通过这一段时间来看,其实我也学习了一些设计模式,但是都是一些demo,没有具体的例子,学习起来不深刻,所以 ...