java 对象的转型有什么用?25
发布网友
发布时间:2023-09-12 06:32
我来回答
共2个回答
热心网友
时间:2023-10-03 04:58
做个比喻
Animal 某公司总部
Cat 公司地区子公司
假如公司总部只负责财务结算,子公司负责货物运输
突然有一个客户(调用f方法的地方)打电话给总公司(相当于打电话给Animal ),说需要运输一批货物,总公司需要怎么办,肯定是吧这个业务接下来,然后下放到子公司Cat
需要对象转换,就是要确认那个子公司有资格去做货物运输业务
不需要强转,要么总公司能自己执行货物运输业务
要么,客户知道子公司名称,直接打电话给子公司
第一种方法就是吧eyesColor 这个属性设置为Animal的属性
class Animal {
public String name;
public String eyesColor;
......
}
然后去掉Cat的eyesColor 属性
这样的缺陷很明显,意思是所有子类都有eyesColor属性,就好象,说有子公司都能负责货物运输,实际情况不可能如此
第二种:修改f方法的参数类型
public void f(Cat a) {
System.out.println("name: "+a.name);
System.out.println(" "+a.eyesColor+" eyes");
}
就像上面这样
缺陷:改方法只针对Cat类型适用了
热心网友
时间:2023-10-03 04:59
这是多态的体现, f(Animal a), a 是 cat的父类。 父类对象强转成子类对象后,调用子类的方法。你在写一个dog类继承animal, dog的对象也能传入f函数。强转后调用,dog的方法。多态。
因为,父类引用 Animal a 只能访问子类对象从父类继承过来的成员。所以,强转。
你要是不想转的话,那父类中也要有eyesColor属性。