zoukankan      html  css  js  c++  java
  • java_类型强转

    class Father{
        public void fromFather(){
            System.out.println("fromFather");
        }    
    }
    interface interfaceSon{
        public void fromInterSon();
    }
    class Son extends Father implements interfaceSon {
        public void fromFather(){
            System.out.println("fromFather2");
        }
        public void formSon(){
            System.out.println("fromSon");
        }
        public void fromInterSon(){
            System.out.println("formInterfaceOfSon");
        }
    }
    class Test{
        public void test1(Father f){
            f.fromFather();         
    // the method is not the method of super,
    //  which has be overwritten,but now can be used by super
    //        f.fromSon();           
    //   0:    can not be compiled,need create method in Father
            System.out.println("--------"+f.toString());    
    //   1:  com.h.Son@1bab50a
            System.out.println("--------"+f.getClass());   
    //   1:  class com.h.Son
        } 
        public void test2(Father f){
            ((Son)f).fromFather();
            ((Son)f).formSon();
            ((Son)f).fromInterSon();
            System.out.println("--------"+f.toString());    
      //   2:  com.h.Son@1bab50a
            System.out.println("--------"+f.getClass());  
      //   2:  class com.h.Son
        }
        public void test3(Father f){ 
            ((interfaceSon)f).fromInterSon();    
            System.out.println("--------"+f.toString());   
       //   3:  com.h.Son@1bab50a
            System.out.println("--------"+f.getClass());    
       //   3:  class com.h.Son
            
    /*        假如Son没有实现接口时,即:未标有  implements interfaceSon,
            编译还是不会报错,但运行时会出现转换异常,
          ----:Son cannot be cast to interfaceSon
    */
        }
    }
    public class TypeConvert{
        public static void main(String args[]){
            Son s = new Son();
            Test t = new Test();
            t.test1(s);
            t.test2(s);
            t.test3(s);
            
    /*        Father f = new Father();
            s = (Son)f;               
         //4: java.lang.ClassCastException
    */    
        }
    }


       强制类型转换:


        1  基本数据类型转换:
           一种是类型兼容的,那么Java 将自动地进行转换,
               如: form int to float
          另一种不兼容(缩小转换):一种增加()的显式的类型变换,
                  如: int to byte ,(会%256变为byte) ,
                 如: float to int (损失精度)
       
       2 引用数据类型转换:( 也为显示的类型转换)
      
           1 因为一旦一个对象创建了,对象的类型已经确定,
                也可以不用这个类型变量引用她,


           2.父类变量:
                用子类类型引用交给了父类变量,(上转型)
            但是你又想使用他原本的的特异功能,
                这个时候你可以又将其强转为子类,
             (但是如果对象本身就是父类类型,强转就会出错,见注释:4)


          3.接口变量引用:
             接口变量本身之只能通过实现它的类来获得其引用(接口回调)

        理解:


       1. 编译器值检查类型之间有无继承,或实现关系,有则通过;
              运行时则检查真正的类型,否则报错;


       2。由上面1 2 3 的注释,
          即使子类,或实现接口的类将引用给了其他变量来引用,
          但还是不会改变他原有属性, 一旦强转了,所引用的变量对原有的属性
          (如:son)将会选择性的拥有,


       3 假如将Son看做若干房间(方法看做房间)的拥有者,其包括:
           自己特有方法,实现接口的方法,继承父类的方法,
             (内存中也有未继承的方法)
          1. 父类只有父类的钥匙,
             只能开未继承的房间(自己的),继承或重写的,如:注释 0,
             ??---:test1()中f.fromFather()
             为什么结果会是fromFather2,,呵呵因为重写覆盖了了;
          2. 接口变量值拥有,开启实现的方法,

  • 相关阅读:
    AJAX MANAGER
    关闭IE浏览器的自动RSS阅读功能
    WCF REST Configuration for ASP.NET AJAX and plain REST Services
    jquery, json与ashx的完美结合
    ASP.NET 页面中的 ValidateRequest属性
    ASP.NET中的healthMonitoring
    GZip Compress SoapExtension
    ASP.NET MVC : UrlHelper
    Microsoft Ajax Content Delivery Network
    ASP.NET: TextBox控件如果设置为ReadOnly则PostBack之后可能丢失数据的问题
  • 原文地址:https://www.cnblogs.com/foreverzd/p/3415632.html
Copyright © 2011-2022 走看看