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)
  • 相关阅读:
    可级联国标GB28181视频平台EasyGBS的视频智能分析平台EasyCVR启动无法正常运行如何解决?
    国标GB28181协议视频融合智能分析平台EasyCVR中创建数据库表结构体表名无效问题排查
    国标GB28181/RTSP/HIKSDK/Ehome视频智能分析平台EasyCVR如何效仿EasyGBS添加用户功能接口?
    国标GB28181(EasyGBS)/RTSP/HIKSDK/EHOME协议视频智能分析平台EasyCVR人脸识别智能分析功能拓展
    【解决方案】基于国标GB28181协议视频智能分析平台EasyCVR/EasyGBS打造的智慧企业AR云景解决方案
    边缘计算网关EasyNVR及云服务EasyCVR、EasyDSS等联合打造TSINGSEE青犀视频云-边-端协同一体化
    【解决方案】企业远程行政会议协同办公视频会议EasyRTC如何实现远程办公?
    网络映射/端口穿透/视频组网服务EasyNTS上云网关平台的相关配置参数介绍
    称号
    剪辑的楼天城的ACM之路
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4239478.html
Copyright © 2011-2022 走看看