Java接口编程
时间 : 2022年4月22日
主题 : Java接口编程
作者 : NacJackson
一、什么是接口?
什么是接口?
水管可以通过分叉接口可以实现多转接,电脑接口可以通过接口可以实现很多的拓展功能
官方概念(来自百度):
在Java中接口就是一种能力和约束,接口的定义就是代表定义了某种能力,方法的定义就是能力的具体要求
示例:
interface demo_Interface_info {
public abstract void method();
}
注意:接口支持多实现,可以为类扩充多种能力
二、接口与抽象类的异同
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点: 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点: 接口可以多继承,抽象类不行
第三点: 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点: 接口中基本数据类型为static 而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
此处转载自 :冯立彬-接口和抽象类有什么区别
三、接口的规范
-
接口在被实现的时候,必须实现接口中的所有抽象方法
-
实现接口抽象方法时,访问修饰符必须是public
接口的声明:
[访问修饰符] interface 接口名称 [extends 其他接口名]{
//声明变量
//抽象方法
}
四、接口的应用
接口的实现:...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
示例:
interface Person_behavior{}
abstract class Person{}
class Boy extends Person implments Person_behavior{
Boy(){}
}
class main{
Person boy = new boy();
}
五、常量接口
-
将多个常用与表示状态或固定值得变量,以静态常量的形式定义在接口中统一管理,提高代码可读性
-
final :不可改变
1接口当中的常量,可以省略三个关键字,但是系统会默认是这三个;
2接口当中的常量,必须进行赋值,不能不赋值;
3接口中常量的名称,使用完全大写的字母,用下划线进行分隔;
-
格式:
public static final 数据类型 常量名称(大写) =数据值;
-
访问常量:
-
接口名称.常量;
此处转载自:Damocless-接口当中的常量定义和使用
六、接口回调
七、接口的好处
- 程序的耦合度降低
- 更自然的使用多态
- 设计与实现完全分离
- 更容易搭建程序框架
- 更容易更换具体实现
八、代码
// Copyright (c) 2022.
// Author : Nac.Jackson
// Blog : http://www.mikea.ltd
package demo_interface;
/**
* @Author : Nac.Jackson
* @Date :2022 年 04 月 22 日 星期五
* @Time :21 时 44 分 36 秒
* @Description : 努力不完全,等于完全不努力。
* @About : interface
*/
interface Person_behavior {
public void run();
public void jump();
public void eat();
}
abstract class Person {
protected String Name;
protected String gender;
public abstract String getGender();
public abstract void setGender(String gender);
public Person(String name){}
abstract void setName(String name);
abstract void getName();
public String toString(){
return "姓名:"+Name;
}
}
class Boy extends Person implements Person_behavior{
protected String gender="男";
@Override
public String getGender() {
return gender;
}
@Override
public void setGender(String gender) {
this.gender = gender;
super.gender = gender;
}
public Boy(String name) {
super(name);
}
@Override
public void run() {
System.out.println(Name+"奔跑中......");
}
@Override
public void jump() {
System.out.println(Name+"跳跃中......");
}
@Override
public void eat() {
System.out.println(Name+"吃饭中......");
}
@Override
void setName(String name) {
this.Name = name;
}
@Override
void getName() {
System.out.println(super.Name);
}
}
class Girl extends Person implements Person_behavior{
protected String gender="女";
@Override
public String getGender() {
return gender;
}
@Override
public void setGender(String gender) {
this.gender = gender;
super.gender = gender;
}
public Girl(String name) {
super(name);
}
@Override
public void run() {
System.out.println(Name+"奔跑中......");
}
@Override
public void jump() {
System.out.println(Name+"跳跃中......");
}
@Override
public void eat() {
System.out.println(Name+"吃饭中......");
}
@Override
void setName(String name) {
this.Name = name;
}
@Override
void getName() {
System.out.println(super.Name);
}
}
class Test{
public static void main(String[] args) {
Person boy = new Boy("Tom");
Person girl = new Girl("Alice");
}
}