• 怎么证明接口内所有方法都自动是public的


    接口是只是特殊的抽象类,它不包含普通方法,只包含抽象方法。而这些抽象方法就是多个类共同的公共行为规范,需要类去遵守,这些行为是与外部交流的通道,这就意味着接口通常定义的都是公共的用法,接口只关心这些类有没有遵守这些方法,而不去关心这些类的内部数据,也不关心这些类的方法实现细节。打个比方来说,接口就是一个公司的规章制度,部门就是类,那规章制度都是公开的要求大家遵守的,不可能把它私有起来不让别人看吧,那就没有意义了。

    那怎么证明呢,可以用反射。

    定义接口文件

    package com.zhangqi.jvm;
    
    import java.util.Date;
    
    public interface ITest {
    	
    	double PI = 3.14;
    	Date CREATE_TIME = new Date();
    	
    	void play();
    	String getName();
    }
    

    接下来,测试方法来反射获取静态变量和方法。

    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);
    		}
    	}
    }
    

    执行之后得到结果如下:

    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
    

      

  • 相关阅读:
    UCML破解
    UCML快速开发平台学习1-UCML环境安装
    window系统安装jdk,jre
    解决Android报错No resource found that matches the given name (at 'text' with value '@string/hello').
    es6小技巧整理
    如何将项目推到github上面
    如何将时间格式化
    uni-app 页面跳转的两种方法
    layui表单校验及监听复选框选中状态的坑
    使用nvm管理多个不同版本的nodeJS之安装成功nodeJs之后使用npm报错的问题
  • 原文地址:https://www.cnblogs.com/boucher/p/5682140.html
Copyright © 2020-2023  润新知