疯狂Java讲义学习总结-面向对象-接口(interface)
- 1.接口定义语法
- 2.接口的继承(extends)
- 3.接口的使用(implements)
- 4.接口和抽象类
- 5.面向接口编程
1.接口定义语法
// 接口定义使用interface关键字
[修饰符] interface 接口名 extends 父接口1,父接口2...
{
//零到多个常量定义...(总是使用 public static final 来修饰)
//零到多个抽象方法定义...
//零到多个内部类、接口、枚举定义...
//零到多个私有方法、默认方法或类方法定义...
}
实例:
[修饰符] interface 接口名 extends 父接口1,父接口2...
{
int MAX_SIZE = 50; //系统自动为接口里定义的成员变量增加public static final 修饰符
public static final int MAX_SIZE = 50; //两行代码结果完全一样
void out(); //抽象方法
void getData(String msg);
//零到多个内部类、接口、枚举定义...
private void foo() //私有方法
{
System.out.println("foo私有方法");
}
default void test() //默认方法
{
System.out.println("默认的test()方法");
}
static String staticTest() //类方法
{
return "接口里的类方法"
}
private static void bar() //私有静态方法
{
System.out.println("bar私有静态方法");
}
}
- 修饰符可以是public或省略,省略了默认采用包权限访问控制符;
- 接口名与类名采用相同的命名规则,合法的标识符即可;
- 一个接口可以有多个直接父类接口,但接口只能继承接口,不能继承类;
- 不管有没有修饰符,系统自动为接口里定义的成员变量增加public static final 修饰符
- 接口里没有构造器和初始化块因此接口里定义的成员变量只能再定义时指定默认值。
- 接口里定义的内部类、内部接口、内部枚举默认都采用public static两个修饰符(不管有没有)
- 接口可以被当成一个特殊的类,因此一个Java源文件中最多只能有一个public接口,如果一个Java文件里定义了一个public接口,则改源文件的主文件名必须与该接口名相同
2.接口的继承(extends)
1、接口支持多继承,即一个接口可以有多个直接父接口
2、子接口扩展某个父接口,将会获得父接口里定义的抽象方法、常量。(与类的继承相似)
interface interfaceC extends interfaceA,interfaceB...
{
接口体部分
}
3.接口的使用(implements)
接口的主要用途:
- 定义变量
- 调用接口中定义的常量
- 被其他类实现
[修饰符] class 类名 extends 父类 implements 接口1,接口2...
{
类体部分
}
实现接口与继承父类相似,一个类可以实现(implements)一个或多个接口,实现接口将获得所实现接口里定义的常量(成员变量)、方法(抽象方法和默认方法)
4.接口和抽象类
接口作为系统与外界交互的窗口,体现的是一种规范;
抽象类作为系统中多个子类共同的父类,他所体现的是一种模板式设计;
1、共同特征:
- 就扣和抽象类都不能被实例化,位于继承树顶端,用于被其他类实现和继承
- 都可以包含抽象方法,但是实现接口或者继承抽象类的普通子类必须实现这些抽象方法
2、差异:
- 接口里不能为普通方法提供方法实现
- 接口里不能定义普通成员变量
- 接口里不能包含构造器
- 接口里不能包含初始化块
- 一个类最多只能有一个直接父类(包括抽象类),一个类可以实现多个接口(弥补Java单继承的不足)
5.面向接口编程
接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极好的降低程序各个模块间的耦合提高系统的可扩展性和可维护性。
- 简单的工厂模式(基本原理清楚,但是实际代码实现那块还是有些疑问)
工厂模式是最常用的一类创建型设计模式,包括 抽象工厂模式,工厂方法模式和简单工厂模式 这三种,简单工厂模式是其中最简单的一种
- 简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式,但不属于GOF23种设计模式 - 角色
Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Product - Product(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。
- ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法
在简单工厂模式中,客户端通过工厂类来创建一个产品类的实例,而无须直接使用new关键字来创建对象,它是工厂模式家族中最简单的一员
- 命令模式(command接口)
// Command.java
public interfaces Command
{
//接口里定义的process方法用于封装“处理行为”
void process(int element);
}
// ProcessArray.java
public class ProcessArray
{
public void process(int[] target. Command cmd)
{
for(var t : target)
{
cmd.process(t);
}
}
}
// CommandTest.java
ppublic class CommandTest
{
public static void main(String[] args)
{
var pa = new ProcessArray();
int[] target = {1,2,3,4};
//
pa.process(target,new PrintCommand());
pa.process(target,new SquareCommand());
}
}
// PrintCommand.java
public class PrintCommand implements Command
{
public void process(int element)
{
System.out.println("迭代输出目标数组的元素:" + element);
}
}
// SquareCommand.java
public calss SquareCommand implements Command
{
public void process(int element)
{
System.out.println("数组的平方是:" + element * element);
}
}