Java之接口的详解
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
2.1 概述
我们已经学完了抽象类抽象类中可以用抽象方法也可以有普通方法构造方法成员变量等。那么什么是接口呢接口是更加彻底的抽象JDK7之前包括JDK7接口中全部是抽象方法。接口同样是不能创建对象的。
2.2 定义格式
//接口的定义格式
interface 接口名称{
// 抽象方法
}
// 接口的声明interface
// 接口名称首字母大写满足“驼峰模式”
2.3 接口成分的特点
在JDK7包括JDK7之前接口中的只有包含抽象方法和常量
2.3.1.抽象方法
注意接口中的抽象方法默认会自动加上public abstract修饰程序员无需自己手写 按照规范以后接口中的抽象方法建议不要写上public abstract。因为没有必要啊默认会加上。
2.3.2 常量
在接口中定义的成员变量默认会加上 public static final修饰。也就是说在接口中定义的成员变量实际上是一个常量。这里是使用public static final修饰后变量值就不可被修改并且是静态化的变量可以直接用接口名访问所以也叫常量。常量必须要给初始值。常量命名规范建议字母全部大写多个单词用下划线连接。
2.3.3 案例演示
public interface InterF {
// 抽象方法
// public abstract void run();
void run();
// public abstract String getName();
String getName();
// public abstract int add(int a , int b);
int add(int a , int b);
// 它的最终写法是
// public static final int AGE = 12 ;
int AGE = 12; //常量
String SCHOOL_NAME = "黑马程序员";
}
2.4 基本的实现
2.4.1 实现接口的概述
类与接口的关系为实现关系即类实现接口该类可以称为接口的实现类也可以称为接口的子类。实现的动作类似继承格式相仿只是关键字不同实现使用 implements
关键字。
2.4.2 实现接口的格式
/**接口的实现
在Java中接口是被实现的实现接口的类称为实现类。
实现类的格式:*/
class 类名 implements 接口1,接口2,接口3...{
}
从上面格式可以看出接口是可以被多实现的。大家可以想一想为什么呢
2.4.3 类实现接口的要求和意义
-
必须重写实现的全部接口中所有抽象方法。
-
如果一个类实现了接口但是没有重写完全部接口的全部抽象方法这个类也必须定义成抽象类。
-
意义接口体现的是一种规范接口对实现类是一种强制性的约束要么全部完成接口申明的功能要么自己也定义成抽象类。这正是一种强制性的规范。
2.4.4 类与接口基本实现案例
假如我们定义一个运动员的接口规范代码如下
/**
接口接口体现的是规范。
* */
public interface SportMan {
void run(); // 抽象方法跑步。
void law(); // 抽象方法遵守法律。
String compittion(String project); // 抽象方法比赛。
}
接下来定义一个乒乓球运动员类实现接口实现接口的实现类代码如下
package com.itheima._03接口的实现;
/**
* 接口的实现
* 在Java中接口是被实现的实现接口的类称为实现类。
* 实现类的格式:
* class 类名 implements 接口1,接口2,接口3...{
*
*
* }
* */
public class PingPongMan implements SportMan {
@Override
public void run() {
System.out.println("乒乓球运动员稍微跑一下");
}
@Override
public void law() {
System.out.println("乒乓球运动员守法");
}
@Override
public String compittion(String project) {
return "参加"+project+"得金牌";
}
}
测试代码
public class TestMain {
public static void main(String[] args) {
// 创建实现类对象。
PingPongMan zjk = new PingPongMan();
zjk.run();
zjk.law();
System.out.println(zjk.compittion("全球乒乓球比赛"));
}
}
2.4.5 类与接口的多实现案例
类与接口之间的关系是多实现的一个类可以同时实现多个接口。
首先我们先定义两个接口代码如下
/** 法律规范接口*/
public interface Law {
void rule();
}
/** 这一个运动员的规范接口*/
public interface SportMan {
void run();
}
然后定义一个实现类
/**
* Java中接口是可以被多实现的
* 一个类可以实现多个接口: Law, SportMan
*
* */
public class JumpMan implements Law ,SportMan {
@Override
public void rule() {
System.out.println("尊长守法");
}
@Override
public void run() {
System.out.println("训练跑步");
}
}
从上面可以看出类与接口之间是可以多实现的我们可以理解成实现多个规范这是合理的。
2.5 接口与接口的多继承
Java中接口与接口之间是可以多继承的也就是一个接口可以同时继承多个接口。大家一定要注意
类与接口是实现关系
接口与接口是继承关系
接口继承接口就是把其他接口的抽象方法与本接口进行了合并。
案例演示
public interface Abc {
void go();
void test();
}
/** 法律规范接口*/
public interface Law {
void rule();
void test();
}
*
* 总结
* 接口与类之间是多实现的。
* 接口与接口之间是多继承的。
* */
public interface SportMan extends Law , Abc {
void run();
}
2.6扩展接口的细节
不需要背只要当idea报错之后知道如何修改即可。
关于接口的使用以下为语法上要注意的细节虽然条目较多但若理解了抽象的本质无需死记硬背。
-
当两个接口中存在相同抽象方法的时候该怎么办
只要重写一次即可。此时重写的方法既表示重写1接口的也表示重写2接口的。
-
实现类能不能继承A类的时候同时实现其他接口呢
继承的父类就好比是亲爸爸一样 实现的接口就好比是干爹一样 可以继承一个类的同时再实现多个接口只不过要把接口里面所有的抽象方法全部实现。
-
实现类能不能继承一个抽象类的时候同时实现其他接口呢
实现类可以继承一个抽象类的同时再实现其他多个接口只不过要把里面所有的抽象方法全部重写。
-
实现类Zi实现了一个接口还继承了一个Fu类。假设在接口中有一个方法父类中也有一个相同的方法。子类如何操作呢
处理办法一如果父类中的方法体能满足当前业务的需求在子类中可以不用重写。 处理办法二如果父类中的方法体不能满足当前业务的需求需要在子类中重写。
-
如果一个接口中有10个抽象方法但是我在实现类中只需要用其中一个该怎么办?
可以在接口跟实现类中间新建一个中间类适配器类 让这个适配器类去实现接口对接口里面的所有的方法做空重写。 让子类继承这个适配器类想要用到哪个方法就重写哪个方法。 因为中间类没有什么实际的意义所以一般会把中间类定义为抽象的不让外界创建对象