java中接口的实现与用途

本文探讨了Java中接口的本质,它作为规范和契约的角色。接口与抽象类的主要区别在于,接口仅定义规则,而抽象类可能包含具体实现。接口的创建与实现涉及到`implements`关键字,并且一个类可以实现多个接口。接口的主要作用在于实现统一访问,提供多态性,允许根据需要切换不同的实现类。总结了Java接口的特性,包括成员变量默认为常量,方法为抽象且无实现,以及类必须实现接口的所有抽象方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

interface

接口的本质

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都有
  • 接口:只有规范

【接口的本质】

  • 接口就是规范,定义的是一组规则,体现在“如果你是…则必须能”的思想。如:如果你是天使,则必须能飞。如果你是人,则必须能思考
  • 接口的本质是契约,就像我们的法律一样,制定好后,大家都要遵守
  • OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如C++、java、C#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象

接口与抽象类的区别

抽象类也是类,出了可以写抽象方法和不能直接使用new实例化对象外,其他的和普通类没有什么不一样。接口已经是另一种类型了,和类是有本质区别的,不能用类的标准去衡量接口。

  1. 声明类的关键字是class、声明接口的关键字是interface

抽象类是用来被继承的,java中的类是单继承。

类A继承了抽象类B,那么类A的对象就属于B类型了,可以使用多态

一个父类的引用,可以指向这个父类的任意子类对象

】继承的关键字是extends

接口是用来被实现的,java中的接口可以被多实现。

类A实现接口B、C、D、E、…那么类A的对象就属于B、C、D、E、等类型了,可以使用多态

接口的创建与实现

】实现的关键字是implements

public interface Action{
    public abstract void run();
    
    //默认就是public abstract修饰的
    void test();
    public void item();
    abstract void go();
}

接口中的变量都是静态常量(public static final修饰)

接口中可以不写任何属性,如果写了,该属性必须是public static final修饰的静态常量

可以直接使用接口名来访问其属性,且声明的同时必须赋值(接口中不能编写静态代码块)

public interface Action{
    public static final String NAME = "Jake" ;
    //默认就是public static final修饰的
    int AGE = 20 ;	//常量用全大写表示	命名规范
}
main:
System.out.println(Action.NAME);	//直接用接口名访问		

一个类可以实现多个接口

public class Student implements A,B,C,D{
    //Student	需要实现接口A B C D中所有的抽象方法
    //否则Student类 就必须声明为抽象类,因为有抽象方法没有实现
}
main:
A s1 = new Student();
B s2 = new Student();
C s3 = new Student();
D s4 = new Student();

s1只能调用对应接口A中声明的方法已经Object中的方法

一个接口可以继承多个父接口

public interface C extends A,B{
    public void testC();
}

//Student相当于实现了A B C三个接口,需要实现三个接口中所有的抽象方法
//Student的对象也就同时属于A类型 B类型 C类型
public class Student implements C{
    public void testA(){}
    public void testB(){}
    public void testC(){}
}

接口的作用

接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建

【接口名】 【对象名】 = new 【实现接口的类】

这样你想用哪个类的对象就可以new哪个对象,不需要大量修改代码

假如两个类中都有test()方法,那么用接口来实现,那样我们new a(); 就是用a的方法,new b() 就是用b的方法

这个就叫统一访问,因为你实现这个接口类的方法名相同,但是实现的内容不同

总结:

  1. java接口中的成员变量默认都是public,static,final类型的(都可以省略),必须被显示初始化,接口中的成员变量为常量(大写,单词之间用"_"分隔)
  2. java接口中的方法默认都是public,abstract类型(可省略)没有方法体,接口不能被实例化
  3. java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法
  4. 接口中没有构造方法,不能被实例化
  5. 一个接口不能实现另一个接口,但是它可以继承其他接口(可继承多个)
  6. java接口必须通过类来实现他的抽象方法
  7. 当类实现了某个java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类
  8. 不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口类的实例
  9. 一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承
class A extendx B implements C{
    ...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值