在論壇上,看到一個問題,當然,各位聰明的客官想必已經知道問題是什么了,嘿嘿,沒錯就是文章的標題:final修飾的類,其屬性和方法默認是被final修飾的嗎?
老實說,剛開始看到這個問題的時候,有點懵...(現場捕獲懵比一只:),嘻嘻),之前學習的語法什么的,隔了太久忘記了。。。既然忘記了,就寫個程序進行測試下吧
嘻嘻,以下是測試的程序:(小程序中用到了反射機制,還沒學習到的客官,可以先去了解下哈:) )

/** * DateAndTime: 2016-12-13下午10:38:08 */ package question; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; /** * 測試final修飾的類,其屬性和方法是不是final的? * ------使用String類進行測試------ * ---------利用反射機制獲取屬性和方法的修飾符,得到結果 * @author Administrator * */ public class Question1 { public static void reflection(Class clazz) { System.out.println("------屬性------"); Field[] fields = clazz.getDeclaredFields(); for(Field f : fields) { int iModifiers = f.getModifiers(); String sModifiers = Modifier.toString(iModifiers); //打印所有屬性的修飾符及屬性名 System.out.println(sModifiers+" "+f.getName()); } System.out.println("------方法------"); Method[] methods = clazz.getMethods(); for(Method m: methods) { int iModifiers = m.getModifiers(); String sModifiers = Modifier.toString(iModifiers); //打印所有方法修飾符及方法名 System.out.println(sModifiers+" "+m.getName()); } } public static void main(String[] args) { reflection(Person.class); } } final class Person { private String name; private String age; private final String idCard; Person(String idCard) { this.idCard = idCard; } public static void m(){}; public void m1(String s){}; public final void m2(){}; }
下面是程序的輸出結果
------屬性------ private name private age private final idCard ------方法------ public static m public m1 public final m2 public final wait public final native wait public final wait public equals public toString public native hashCode public final native getClass public final native notify public final native notifyAll
結果顯示,final修飾的類,其屬性和方法不是被final修飾的。
final定義的類,其中的屬性、方法不是final的。
其實,可以做個假設: 如果,final定義的類,其中的屬性和方法默認是final的,那結合生活,舉個例子
例如:
假設,房子 中 有一個 家具類 的對象作為屬性(很合理哈...),現在假設,一旦住進了房子,以后不會搬家,那么這個
房子類就應該定義成final的,那么根據上面的假設:家具一旦被初始化后,也是不能更改指向的引用(家具一旦被確定后,就不能換新的)。
但是,如果說某天,家里的家具壞了,必須要換一個(很正常...),(換新家具,相當於變量引用了一個新對象,
而final修飾的變量一旦被賦值,則引用不能被修改),很明顯不符合情理,形成了悖論... 家里的家具明明可以換的,不然壞了,不能換新的怎么用。。。
到此結束了,客官請回吧 :)