java 父类强制转换为子类

移动开发 码拜 9年前 (2016-05-23) 2427次浏览
JAVA中父类只有一种情况可以转换为子类,就是对象本身引用的就是子类,如:

public class Persion {}
public class Man extends Persion {}
Persion p = new Man();
Man m = (Man) p;

但是在Android中发现一个另类,一直想不清楚,希望高手指点一二!

// ViewGroup.LayoutParams
public static class LayoutParams {
...
}
// ViewGroup.MarginLayoutParams:
public static class MarginLayoutParams extends ViewGroup.LayoutParams {
...
}
// 然而这样是没有错的,child.getLayoutParams() 看了很久,都是返回 ViewGroup.LayoutParamsMarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();

为何?

解决方案

20

明显你的child 是添加在LinearLayout 或 FrameLayout等中的 它们的LayoutParameter 是继承与MarginLayoutParam
你可以换成ListView的子View就会出错

20

你看下 LinearLayout FrameLayout等 的LayoutParameter

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java 父类强制转换为子类
喜欢 (0)
[1034331897@qq.com]
分享 (0)