泛型2
7.泛型類(lèi)的繼承——以泛型類(lèi)為父類(lèi)
例7. 繼承泛型類(lèi)示例。
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);} }復(fù)雜一點(diǎn)兒的子類(lèi)如下:
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;} }測(cè)試程序如下:
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());}}程序的輸出結(jié)果如下:
Value is:1008. 泛型類(lèi)的繼承——以非泛型類(lèi)為父類(lèi)
例8. 繼承非泛型類(lèi)示例。
父類(lèi):
package fanxing;public class nonGen {int n;public nonGen(int n){this.n = n;}public nonGen(){n = 0;}public int getn(){return n;} }派生類(lèi):
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;} }測(cè)試程序:
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());}}程序運(yùn)行結(jié)果如下:
Value is:1009. 運(yùn)行時(shí)類(lèi)型識(shí)別
例9. 泛型類(lèi)的類(lèi)型識(shí)別示例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");}}程序輸出結(jié)果為:
Generic<Integer> object is instance of Generic Generic<Integer> object is instance of Generic<?> Generic<Integer> class equals Generic<String> class例10. 泛型類(lèi)的類(lèi)型識(shí)別示例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!");}}程序輸出結(jié)果為:
derivedGen object is instance og superGen!從上述結(jié)果可以看出,只有子類(lèi)對(duì)象被instanceof識(shí)別為父類(lèi)對(duì)象。
10.強(qiáng)制類(lèi)型轉(zhuǎn)換
泛型類(lèi)的強(qiáng)制類(lèi)型轉(zhuǎn)換的一般格式如下:
(泛型類(lèi)名<實(shí)際參數(shù)>)泛型對(duì)象例11. 強(qiáng)制類(lèi)型轉(zhuǎn)換示例。
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");}}程序的運(yùn)行結(jié)果如下:
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)?
總結(jié)
- 上一篇: android 图像处理(黑白,模糊,浮
- 下一篇: GB-T 16260.1-2006 软件