由此可见,结果发生了改变,说明final定义的变量是可以改变的,但是改变的不是变量的引址(即reference),而是变量的内容。 我们假如写如下代码 /* * some error will be threw A b=new A(); a=b; */ 则会发生错误,说明final类型的对象不能指向另外一个同类型的对象。
public class A { int t=10; public A() { } public void setT(int t){ this.t=t; } public int getT(){ return this.t; } public final void finalA(){ System.out.println(" final method finalA"); } private void privateA(){ System.out.println("private method privateA"); } private final void privateFinalA(){ System.out.println("private final method privateFinalA"); } }
2) AA.java 继续自A.java package zy.pro.jbd.testbase;
public class AA extends A { public AA() { } /* public final void finalA(){ System.out.println(" final method finalA"); }
这几行代码是错误的
*/ private void privateA() { System.out.println("private method privateA in class AA");
}
private final void privateFinalA() { System.out.println("private final method privateFinalA in class AA"); }
}
3)我的测试程序FinalDemo.java package zy.pro.jbd.demo;
/** * this demo is created to test the usage of the final reserved Word */
import zy.pro.jbd.testbase.A;
public class FinalDemo {
final int numInt1 = 16; final String str = "zy"; final String str1; final A a = new A();
public FinalDemo() { str1 = "zy"; }
public static void main(String[] args) { System.out.println("-------------------------------------------------"); FinalDemo fd = new FinalDemo(); fd.executeFinalTest();
}
public void executeFinalTest() { this.testFinalInt(); this.testFinalString(); this.testFinalObject(); }