zoukankan      html  css  js  c++  java
  • 泛型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:100

    8. 泛型类的继承——以非泛型类为父类

    例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:100

    9. 运行时类型识别

    例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.derivedGen
        at fanxing.demoForceChange.main(demoForceChange.java:10)
  • 相关阅读:
    Source Insight技巧收集
    宝贝,祝你生日快乐!
    【转载】C++中的extern C
    Meego
    source insight增加新类型方法
    点操作符和箭头操作符的异同
    【转载】mtk编译命令
    margin和padding的用法与区别以及bug处理方式
    js数组
    随机验证码,颜色同时刷新
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4239478.html
Copyright © 2011-2022 走看看