Java中父类与子类的转换问题
Posted 小强屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中父类与子类的转换问题相关的知识,希望对你有一定的参考价值。
自己在自学安卓,学的过程中遇到了不少困难,从中意识到自己的java知识不够扎实而导致,为此分享一下自己的java知识,一来是巩固知识,二来是给一些也在学java的同学共享共享!
首先先看个例子:
class A { public A() { } } class B extends A { public B() { super(); } }
不难理解,上面定义了两个类,一个是类A,一个是有A派生而来的类B
在看下面的代码:
public class TestDemo { public static void main(String[] args) { B b = new B(); A a = new A(); a = b; } }
这段代码也不难理解,父类要赋值给子类,这就好比,狗(子类)是动物(父类)一样。
接下来才是我要讲的重点:
public class TestDemo { public static void main(String[] args) { B b = new B(); A a = new A(); b=(B) a; } }
这段代码在编译时期看不出有什么错误,但运行时却报错了:
Exception in thread "main" java.lang.ClassCastException: com.laowu.A cannot be cast to com.laowu.B
报错说:A类不能转换成B,这就好比:动物(父类)是狗(子类)一样,不合逻辑。
但是下面这段代码编译和运行都不会出错:
1 public class TestDemo { 2 3 public static void main(String[] args) { 4 B b = new B(); 5 A a = new B(); 6 b = (B) a; 7 } 8 9 }
这段代码也是我初学时很纳闷的地方,但仔细想想就理解了,先看第5行代码,父类A由子类B创建的,之后第6行代码,子类对象b由父类对象强制转换而来
这就好比,首先说明了这个动物对象是狗创建的,然后说这个动物就是狗,所以逻辑上没问题,实际上也没问题。
这是我第一次发博文,可能在布局上有很多不足之处,欢迎指出,在内容上也有不足或者错误的地方也欢迎指出,大家互相交流,才能更好地互相学习。
以上是关于Java中父类与子类的转换问题的主要内容,如果未能解决你的问题,请参考以下文章
SV中父类与子类句柄转换,即子类的扩展类与父类句柄转换等问题