有時候,你不希望別人坐享其成,通過繼續(xù)你寫的類得到他自己所需要的類,怎么辦呢?這個時候你就可以在你的class之前加上final這個修飾府,例如public final class test{……},加上了這個修飾符之后,別人在繼續(xù)這個類的話就會編譯出錯,提示他這個類不能構建子類。從這我們可以看出,final修飾符和abstract修飾符是不能同時使用的,因為abstract類可以說是專門用來繼續(xù)的,而final類則不能用于繼續(xù)。
那么假如是在方法的前面加上final修飾符有什么作用呢?比如說A類中有個聲明為final的方法a(){….},那么B繼續(xù)A的時候,B就不能覆蓋方法a(){….},否則編譯出錯,提示Cannot override the final method from A。此外,假如一個類聲明為final類的話,它里面所有的方法都自動成為final類型的。
自然的,你肯定會問,假如一個域申明為final的時候有什么作用?一個屬性聲明為final之后,你不能在對它重新進行賦值,否則編譯報錯,The final field ×× cannot be assigned。另外,請注重,類聲明為final的時候,僅僅它的方法自動變?yōu)閒inal,而屬性則不會。
public class PolymorphicTest { public PolymorphicTest() { } public void setName(String n){ this.name=n; System.out.PRintln(“在父類中”); } public String getName(){ return this.name; } private String name;}
public class PolymorphicChild extends PolymorphicTest { public void setArea(String a){ this.area=a; } public String getArea(){ return this.area; } //public void setName(String n){// super(“n”); // System.out.pirngln(“在子類中”); // } public static void main(String[] args) { PolymorphicChild child=new PolymorphicChild(); PolymorphicTest test[]=new PolymorphicTest[2]; test[0]=child; PolymorphicChild cast=(PolymorphicChild)test[0]; test[0].setName(“zhukai”); test[1]=new PolymorphicTest(); } private String area;}