|
发表于 2020-3-6 14:30:01
|
显示全部楼层
da b = new de();----------------显示ba.show
为什么?
我这样理解:
1.方法是属于类的
2.对象是通过类去访问方法的
3.每个类中存在一张所有方法的引用表+父类的virtual,abstract方法引用表
4.如果在自己的方法表中没有找到方法引用,那么会去到父类中去寻找
5.new的关键字会再子类方法表中创建一个新方法
6.override的关键字会改写父类virtual,abstract方法表使其指向子类中的方法(即使采用父类访问也访问到子类中override的方法)
7.父类对象的引用是可以指向子类对象的,但采用的是父类的方法表
ba b = new de();
我们使用的方法表是ba的方法表,那么找到的方法就是ba中的方法ba.show
同样:
如果ba中virtual show,de中new show() --------------------- ba.show()
如果ba中virtual show,de中override show() -----------------de.show()
如果ba中show,de中new show() ------------------------------ba.show()(我们这种情况)
如果ba中show,de中override show() -------------------------编译不通过
-------------------------------------------思维混乱中,高手指正--------- -_-" ---- |
|