JAVA父类强转子类

Posted Speaknow1989

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA父类强转子类相关的知识,希望对你有一定的参考价值。

父类转子类

  • 父类强转子类的要求:父类必须是子类的实例,(换句话说就是需要强转的父类必须是子类构造出来的,它本身就是子类的实现)
  • 原理:父类的实现是父类的实例,和子类没有关系,不能直接强转
     //AA 父类
      public class AA 
        private String aa;
    
        public AA()
            this.aa = "AA";
            System.out.println("父类构造");
        
      //toString
      
      //CC 子类
      public class CC extends AA
          public CC() 
              System.out.println("CC子类构造");
          
      
  • 父类对象是子类实现 父类对象可以强转为子类对象
      public class BB 
          public static void main(String[] args) 
              //父类对象是子类实现
              AA a = (AA) new CC();
              //父类可以强转为子类
              CC cc = (CC) a;
              System.out.println(cc.toString());
          
      
    

  • 父类对象是父类实现 不能转为子类对象
      public class BB 
        public static void main(String[] args) 
            //父类对象是父类实现
            AA a =  new AA();
            //父类不可以强转为子类
            CC cc = (CC) a;
            System.out.println(cc.toString());
        
    

  • Exception in thread "main" java.lang.ClassCastException: com.zhy.test.AA cannot be cast to com.zhy.test.CC
  • 根本原因,这个 a 实现和子类就没关系(你出去可以代表你爸,你爸还没生你呢怎么代表你)
  • 解决方法:

  • 主要的解决方法是规规矩矩按子类实现来
  • 如果特殊情况可以先把父类转成json字符串,再赋值转换成子类对象
  • 参考链接:https://www.cnblogs.com/zhy-god/p/14812408.html

子类 父类强转 HttpServlet service实现

相当于 走父类 临时走了一趟

HttpServletRequest ->ServletRequets -> HttpServeltRequest

 

/*     */   public void service(ServletRequest req, ServletResponse res)
/*     */     throws ServletException, IOException
/*     */   {
/*     */     HttpServletRequest request;
/*     */     
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */     HttpServletResponse response;
/*     */     
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */     try
/*     */     {
/* 663 */       request = (HttpServletRequest)req;
/* 664 */       response = (HttpServletResponse)res;
/*     */     } catch (ClassCastException e) {
/* 666 */       throw new ServletException("non-HTTP request or response");
/*     */     }
/* 668 */     service(request, response);
/*     */   }
/*     */ }

 

以上是关于JAVA父类强转子类的主要内容,如果未能解决你的问题,请参考以下文章

子类 父类强转 HttpServlet service实现

java的父类和子类的关系都有哪些?

JSONObject能不能强转成String类型?

PowerBuilder里String类型怎么强转成Time类型还有Int类型

java 多态

软考笔记第十一天值面向对象技术