接口的概念:
-
接口是一个全部由抽象方法组成的集合,接口需要用interface定义,里面只能有抽象的方法和常量。
-
接口体现的是事物扩展的功能,在Java中,类定义了一个实体,包括实体的属性,实体的行为。而接口定义了一个实体可能发生的动作,只有一个声明,没有具体的行为。
-
当一个方法在很多类中有不同的体现是时候这个时候就可以将这个方法抽象出来做成一个接口。
-
接口里面只能有不可修改的全局常量,只能有抽象的方法,接口没有构造方法
-
interface Inter{ public static final int i=10;//全局变量前缀public static final public abstract void eat();//抽象的方法 }
接口的特点
- 定义接口时使用interface定义,区别于抽象类,不需要加Class。
- &接口不能被实例化,不能直接创建对象,因为接口里只有抽象的方法,没有具体的功能。
- 接口可以继承接口,接口要实现具体的功能必须有实现他的子类,实现接口的子类中必须重写接口全部的抽象方法。
- 接口和接口之间可以多继承。
- 接口的子类可以是抽象类,但是没有实际的意义。
- 一个子类可以实现多个接口,通过implements关键字去实现。
- 接口需要多态才能创建对象。
- &所有接口都是抽象方法
- &实现接口必须实现所有接口方法
- &可以定义静态成员变量单必须用final修饰及变量值不能改变
代码示例:
interface A {
public static final int i = 10; //接口只能定义全局常量需要加public static final如果不加系统默认给出,推荐加。
public abstract void eat();
}
interface B extends A { // 接口可以继承接口
public abstract void sleep();
}
interface C {
public abstract void look();
}
abstract class D { //定义一个抽象类
public void run() {
System.out.println("跑起来");
}
public abstract void learn();
}
public class Text extends D implements B, C { //一个子类可以继承一个抽象类同时实现多个接口
//子类如果不是抽象类就必须实现所有的抽象方法
public void eat() { //实现接口A中的抽象方法
System.out.println("吃东西");
}
public void look() { //实现接口C中的抽象方法
System.out.println("看风景");
}
public void sleep() { //实现接口B中的抽象方法
System.out.println("睡懒觉");
}
@Override
public void learn() { //重写抽象类D中的抽象方法
System.out.println("学Java");
}
public static void main(String[] args) {
B b=new Text(); //多态,接口的引用指向子类的对象
b.eat();
b.sleep();
System.out.println(B.i); //静态常量通过接口名去访问,不推荐用对象去调用
C c=new Text();
c.look();
D d=new Text();
d.learn();
}
}
/**
* 输出为:
吃东西
睡懒觉
10
看风景
学Java
*/
Java中接口的好处:
-
类与接口的关系,实现关系,而且是多实现(多重继承,一个类可以实现多个接口,类与类之间是继承关系,Java中的继承是单一继承,一个类只能有一个父类,打破了继承的局限性。
-
对外提供规则(USB接口)
-
对类提供规范或标准
-
设计与实现相互分离:降低了程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高了开发的效率)。保证代码的安全性。
接口(Interface)和多态(Polymorphism)在面向对象编程中虽然紧密相关,但它们在概念和用途上存在明显的区别:
特性 | 接口(Interface) | 多态(Polymorphism) |
---|---|---|
定义 | 一组抽象方法的规范,可以包含默认方法和静态方法 | 允许一个引用类型指向多种实际类型的对象的能力 |
目的 | 定义系统的一部分能力或行为规范 | 编写通用代码,能够对不同类型的对象执行不同的操作 |
语法 | 使用 interface 关键字定义 |
通过方法重写(Override)和方法重载(Overload)实现 |
实现 | 一个类使用 implements 关键字实现接口 |
子类重写父类的方法或实现接口的方法 |
方法特性 | 接口中的方法默认是 public 和 abstract (Java 8之前) |
可以是抽象的,也可以是具体实现的方法 |
构造器 | 接口不能有构造器 | 多态性不涉及构造器 |
类的关系 | 一个类可以实现多个接口 | 一个类可以继承自一个父类,但可以通过多态性使用父类引用操作子类对象 |
使用场景 | 定义共享行为,如 Comparable 、Cloneable |
编写可以在多种类型上执行的通用方法,如 Object 类的 equals 方法 |
与对象的关系 | 接口本身不创建对象,但可以定义与对象相关的行为 | 多态性允许对象以不同的形式表现,增加代码的灵活性 |
与继承的关系 | 接口通过继承扩展,一个类可以实现多个接口 | 多态性通过继承和接口实现,允许方法的重写 |
运行时行为 | 接口本身不涉及运行时行为,但实现接口的类必须遵循规范 | 运行时动态绑定,调用对象实际类型的方法 |
典型应用 | 设计模式,如命令模式、策略模式等 | 允许使用统一的接口处理不同类型的数据 |