Java:证明在接口中的域隐式地是static和final的

在读《Java编程思想》的时候,P184页看到这样一个题目,很有意思:

证明在接口中的域隐士地是static和final的

首先,我们都明白,Java的接口,默认的域都是static和final的,而方法默认的也是public的,那么怎么确定呢?

对于final,这个比较简单,直接改写该域,如果可以,则不是final修饰,如果不能,则是final修饰。

对于static,其实也是一样,如果可以直接访问,那么则是static修饰的,如果不能,则说明不是static修饰的。

除了上面的方法外,还有一种,使用Java的反射机制。

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test 
{
	interface TestInterface{
		int data = 1;
		void test();
	}
	public static void main(String[] args)
	{
		try{
			Class obj = TestInterface.class;
			Field field = obj.getField("data");
			System.out.println("修饰符:"+Modifier.toString(field.getModifiers()));
			Method method = obj.getMethod("test", null);
			System.out.println("修饰符:"+Modifier.toString(method.getModifiers()));

        }catch(Exception e){
            e.printStackTrace();
        };
	}
}

具体就无需解释,运行结果如下:

修饰符:public static final
修饰符:public abstract

 

About: happyhls


发表评论

电子邮件地址不会被公开。 必填项已用*标注