前言
如果你有看过之前的(三) UML-类关系,你会发现博主刻意的规避了接口,并不是接口的的内容太过于复杂,其实接口的UML 图形反倒没多少内容,本文将稍带介绍一些接口的特性
接口、接口内的变量、接口内的方法
接口就是你看到的 Interface 修饰的 Java 类型
一般我们只会在接口中定义变量和抽象方法,其实也可以声明类,定义的接口内部也可以声明内部类,不过本文只探讨接口、接口变量和接口的方法
接口
- 一个 Java 文件可以包含多个接口的定义,且接口相互不可重名
- 接口(
注意,不是接口方法
)只可被 public、abstract 修饰或者不修饰,不可以被static、final、default、protected 修饰 (思考下为什么?
)- 接口
默认
被 abstract 修饰- 一个 Java 文件至多可以有一个接口被 public 修饰,至少可以有0个接口被 public 修饰
- 被public 修饰的接口必须与 所在 Java 文件同名
- 被 public 修饰的接口可以被跨包访问,未被 public 修饰的接口只能在本包内被访问
public interface TestInterface1
或者
interface TestInterface2
接口中的变量
- 接口变量
默认
是 public final static 修饰的,所以接口的变量值需要初始化且无法修改- 子类可以拥有同名变量(如果以接口声明而子类创建对象则使用接口变量,如果使用子类声明且子类创建对象则使用子类变量)
//接口定义
public interface TestInterface {
String name="123";
}
//子类定义
class TestAaa implements TestInterface{
String name="456";
}
//测试方法
@Test
public void test3(){
TestInterface t=new Testaaa();
Testaaa t2=new Testaaa();
System.out.println(t.name);//123
System.out.println(t2.name);//456
}
接口的方法
接口中的方法默认使用 public abstract 修饰
接口中的方法不允许使用 private、protected、default、final、static 修饰
UML 中的接口
终于进入到关键话题了,在之前的介绍中 (https://blog.csdn.net/bestcxx/article/details/80878362)有提到,抽象类和抽象方法在 UML 中需要使用斜体 ,静态方法和静态变量在 UML 中增加下滑线,本文也介绍到,接口中常量是静态的,接口中方法和接口本身是抽象的,但是在 UML 中接口、接口的方法并不是斜体,接口的常量也不用下滑线,所以情况简单很多。
UML 之接口继承接口-泛化
接口继承接口和类中关系一致,子接口-实线-三角形-父接口
interface FirstInterface{
String name="123";
int getNumber(int i);
}
interface SecondInterface extends FirstInterface{}
UML 之 类实现接口-实现
类实现接口是 类-虚线-三角形-接口
class ThirdClass implements SecondInterface{
@Override
public int getNumber(int i) {
// TODO Auto-generated method stub
return 0;
}
}
UML 类引用接口
规则和类中引用一致,也要结合场景,这里只举一个范例
class FourthClass{
private FirstInterface firstInterface;
}