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父类强转子类的主要内容,如果未能解决你的问题,请参考以下文章