为了账号安全,请及时绑定邮箱和手机立即绑定
关注
nwpu_sdu

怎样区分oa 的类型

可是强制转换为officeable类型之后,在用start方法,oa怎么知道是用哪个类的start方法呢?

比如说有猫类和狗类,都继承动物类,执行c.newInstance()以后生成的是哪个类的对象就已经确定了,这时候强转就相当于这样:Cat cat = new Cat(); Animal a = (Animal) cat; a.eat()就调用的是Cat类中的eat(),因为a是从Cat类对象强转过来的,所以调用的是Cat中的eat()

2017-10-13
回复 0

stonesingsong

感觉有点没说清楚
Cat cat = new Cat();这个在内存里新建了名为cat的对象,假设地址为x111;
Animal a = (Animal) cat;(这里不需强制,子类可以直接赋值给父类)这里只是把x111里的对象又取了一个别名a,虽然a的声明是Animal,但是内存里的eat()方法仍然是新建时的eat(),所以结果就是调用了Cat的eat()方法

#1 2017-10-31 回复

stonesingsong

另,提问者问的是接口与实现类,你举得是父类与子类,有细微差别

#2 2017-10-31 回复

stonesingsong

再另,Animal a = (Animal) cat;这里(Animal)是多余的,强制转换是对已装箱对象进行拆箱的过程,即:
Cat cat = new Cat(); //新建cat对象
Animal animal = cat; // 装箱
Cat cat2 =(Cat)animal; //拆箱
而Animal a = (Animal) cat;是装箱的过程,故(Animal) 是多余的,
Cat cat2 =(Cat)animal; 这里的(Cat)才是必须的。

#3 2017-10-31 回复
点击展开后面2条评论

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信