zoukankan      html  css  js  c++  java
  • 怎么证明接口内所有方法都自动是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
    

      

  • 相关阅读:
    HDU 3401 Trade
    POJ 1151 Atlantis
    HDU 3415 Max Sum of MaxKsubsequence
    HDU 4234 Moving Points
    HDU 4258 Covered Walkway
    HDU 4391 Paint The Wall
    HDU 1199 Color the Ball
    HDU 4374 One hundred layer
    HDU 3507 Print Article
    GCC特性之__init修饰解析 kasalyn的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/boucher/p/5682140.html
Copyright © 2011-2022 走看看