final修飾的類,其屬性和方法默認是被final修飾的嗎?


在論壇上,看到一個問題,當然,各位聰明的客官想必已經知道問題是什么了,嘿嘿,沒錯就是文章的標題: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(){};
    
}
View Code

下面是程序的輸出結果

------屬性------
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修飾的變量一旦被賦值,則引用不能被修改),很明顯不符合情理,形成了悖論... 家里的家具明明可以換的,不然壞了,不能換新的怎么用。。。

到此結束了,客官請回吧 :)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM