您的位置:首页 > 编程语言 > Java开发

Java中父类强制转换成子类的原则

2016-01-21 18:13 489 查看
Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用

例:

public class Test {

public static void main(String[] args) {

Person person = new Boy();

Boy boy = (Boy) person;

boy.eat();

}

}

class Person {

public void eat() {

System.out.println("The people were eating");

}

}

class Boy extends Person {

public void eat() {

System.out.println("The boy were eating");

}

}

打印结果:The boy were eating

原因:当Boy实例化后将引用地址返回传给person,这时person引用实际指向的是Boy,所以将person转换成Boy能成功。

再定义一个类:

class Girl extends Person {

public void eat() {

System.out.println("The girl were eating");

}

}

main方法中添加:

Person p = new Girl();

Boy b = (Boy)p;

b.eat();

运行时提示:Girl cannot be cast to Boy(不能将女孩转换成男孩)

原因:当Girl实例化后将引用地址返回传给p,这时p引用实际指向的是Girl,将p转换成Boy也就是说将Girl转换成Boy,肯定不能成功。

上面的例子换句话来说,男孩和女孩都是人这肯定是对的,但你要说女孩是男孩肯定是不对的。

父类转子类的前提是:此父类对象为子类对象的引用
例如:

Father father = (Father)son;

当这种情况时,可以用instanceof判断是否是子类类型(实际) 然后强转回去

if(father instanceof Son)

Son son =(Son)father;

除此之外,不行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: