比如
Animals类里有eat();方法
wolf 类 extends Animals 这个类;
然后wolf里重写eat();方法那么我Animals an = new wolf();
然后 an.eat(); 请问是调用父类还是子类的方法啊?
我看书上说的貌似是子类的方法.
如果能具体阐述下 父类类型的引用变量 被赋值 为一个子类的对象 时,JVM编译和运行时的工作原理就更好了,谢谢哈
Animals类里有eat();方法
wolf 类 extends Animals 这个类;
然后wolf里重写eat();方法那么我Animals an = new wolf();
然后 an.eat(); 请问是调用父类还是子类的方法啊?
我看书上说的貌似是子类的方法.
如果能具体阐述下 父类类型的引用变量 被赋值 为一个子类的对象 时,JVM编译和运行时的工作原理就更好了,谢谢哈
2.如果是发生重写,则在运行时会发生动态绑定,调用子类方法
那么,如果父类中eat();是private 的话,我子类中再写个eat();方法,参数和返回类型等完全相等的情况下,他们2个方法有什么联系么???
2.如果是发生重写,则在运行时会发生动态绑定,调用子类方法.
但是注意,如果子类中没有没有重写eat方法,那就会调用父类的eat方法.
也既是决定了可以访问什么成员的是引用变量的类型,而不是它引用的对象的类型.也就是说将一个子类对象的引用赋给一个超类引用变量时,只可以访问有超类所定义的那部分对象.
关于1实在那是没听过.有错在讲.
其中一种是super()构造函数(不写就默认)且自动调用它extends的那个父类的构造函数.
另一种就是super.父类的非私有东东.
子类影响父类,就不行了.儿子的基因变异是不会影响到他老爹的.
和 Wolf w = new Wolf(); w.eat();
效果都一样!
引用变量的类型对其没什么影响样只是原理不一样,
比如前者以Animals作为引用变量的类型,那么在调用的时候检查到有重写的存在,在运行时会发生动态绑定,调用子类方法;
而后者以Wolf作为引用变量的类型,那么调用的时候就以Wolf类作为起点,然后找eat();方法,如果有就调用,如果没有,就去父类寻找;
简而言之就是: Animals开头的话,是从父类找;
Wolf开头的话,是从子类开始找;
不知道理解得对不对??