接口是只是特殊的抽象类,它不包含普通方法,只包含抽象方法。而这些抽象方法就是多个类共同的公共行为规范,需要类去遵守,这些行为是与外部交流的通道,这就意味着接口通常定义的都是公共的用法,接口只关心这些类有没有遵守这些方法,而不去关心这些类的内部数据,也不关心这些类的方法实现细节。打个比方来说,接口就是一个公司的规章制度,部门就是类,那规章制度都是公开的要求大家遵守的,不可能把它私有起来不让别人看吧,那就没有意义了。
那怎么证明呢,可以用反射。
定义接口文件
1 2 3 4 5 6 7 8 9 10 11 12 | package com.zhangqi.jvm; import java.util.Date; public interface ITest { double PI = 3.14 ; Date CREATE_TIME = new Date(); void play(); String getName(); } |
接下来,测试方法来反射获取静态变量和方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package com.zhangqi.jvm; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectTest { public static void main(String[] args) throws ClassNotFoundException { // 加载com.zhangqi.jvm.ITest类文件 Class<?> clazz = Class.forName( "com.zhangqi.jvm.ITest" ); // 获取类中所有方法 Method[] methods = clazz.getDeclaredMethods(); // 遍历每个方法,并输出该方法 for (Method method : methods) { System.out.println(method.toString()); } System.out.println( "~~~~~~~~~~~~~~~~~~~~~" ); // 获取类中所有静态变量 Field[] fields = clazz.getDeclaredFields(); // 遍历所有常量 for (Field field : fields) { System.out.println(field); } } } |
执行之后得到结果如下:
1 2 3 4 5 | public abstract java.lang.String com.zhangqi.jvm.ITest.getName() public abstract void com.zhangqi.jvm.ITest.play() ~~~~~~~~~~~~~~~~~~~~~ public static final double com.zhangqi.jvm.ITest.PI public static final java.util.Date com.zhangqi.jvm.ITest.CREATE_TIME |
标签:
interface
, public abstract
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?