泛型2
7.泛型類的繼承——以泛型類為父類
例7. 繼承泛型類示例。
package fanxing;public class superGen<T> {T ob;public superGen(T ob){this.ob = ob;}public superGen(){ob = null;}public T getOb(){return ob;} } package fanxing;public class derivedGen<T> extends superGen<T> {public derivedGen(T ob){super(ob);} }復雜一點兒的子類如下:
package fanxing;//public class derivedGen<T> extends superGen<T> { // public derivedGen(T ob){ // super(ob); // } //} public class derivedGen<T,U> extends superGen<T> {U dob;public derivedGen(T ob, U dob){super(ob);this.dob = dob;}public U getDob(){return dob;} }測試程序如下:
package fanxing;public class demoHerit_1 {public static void main(String[] args) {derivedGen<Integer,String> dg = new derivedGen<Integer,String>(100,"Value is:");System.out.print(dg.getDob());System.out.println(dg.getOb());}}程序的輸出結果如下:
Value is:1008. 泛型類的繼承——以非泛型類為父類
例8. 繼承非泛型類示例。
父類:
package fanxing;public class nonGen {int n;public nonGen(int n){this.n = n;}public nonGen(){n = 0;}public int getn(){return n;} }派生類:
package fanxing;public class derivednonGen<T> extends nonGen {T ob;public derivednonGen(T ob, int n){super(n);this.ob = ob;}public T getOb(){return ob;} }測試程序:
package fanxing;public class demoHerit_2 {public static void main(String[] args) {derivednonGen<String> dng = new derivednonGen<String>("Value is:", 100);System.out.print(dng.getOb());System.out.println(dng.getn());}}程序運行結果如下:
Value is:1009. 運行時類型識別
例9. 泛型類的類型識別示例1。
package fanxing;public class demoRTTI_1 {public static void main(String[] args) {Generic<Integer> iob = new Generic<Integer>(100);Generic<String> sob = new Generic<String>("Good");if(iob instanceof Generic)System.out.println("Generic<Integer> object is instance of Generic");if(iob instanceof Generic<?>)System.out.println("Generic<Integer> object is instance of Generic<?>");if(iob.getClass()==sob.getClass())System.out.println("Generic<Integer> class equals Generic<String> class");}}程序輸出結果為:
Generic<Integer> object is instance of Generic Generic<Integer> object is instance of Generic<?> Generic<Integer> class equals Generic<String> class例10. 泛型類的類型識別示例2。
package fanxing;public class demoRTTI_2 {public static void main(String[] args) {superGen<Integer> sg = new superGen<Integer>(100);derivedGen<Integer, String> dg = new derivedGen<Integer, String>(100,"Good");if(sg instanceof derivedGen)System.out.println("superGen object is instance of derivedGen!");if(dg instanceof superGen)System.out.println("derivedGen object is instance og superGen!");if(sg.getClass()==dg.getClass())System.out.println("superGen class equals derivedGen class!");}}程序輸出結果為:
derivedGen object is instance og superGen!從上述結果可以看出,只有子類對象被instanceof識別為父類對象。
10.強制類型轉換
泛型類的強制類型轉換的一般格式如下:
(泛型類名<實際參數>)泛型對象例11. 強制類型轉換示例。
package fanxing;public class demoForceChange {public static void main(String[] args) {superGen<Integer> sg = new superGen<Integer>(100);derivedGen<Integer, String> dg = new derivedGen<Integer, String>(100,"Good");if((superGen<Integer>)dg instanceof superGen)System.out.println("derivedGen object is changed to superGen");if((derivedGen<Integer,String>)sg instanceof derivedGen)System.out.println("superGen object is changed to derivedGen");}}程序的運行結果如下:
derivedGen object is changed to superGen Exception in thread "main" java.lang.ClassCastException: fanxing.superGen cannot be cast to fanxing.derivedGenat fanxing.demoForceChange.main(demoForceChange.java:10)?
總結
- 上一篇: android 图像处理(黑白,模糊,浮
- 下一篇: [Android][Android St