父类和子类继承中方法调用的问题
请问在java入门第二季3-4,1分44秒
在测试类中只创建了子类对象,为什么在测试类里没有调用父类和子类中的方法,结果里面父类的Animal()方法和子类里面的Dog()方法执行了,而父类中同一级别的eat()没有执行?
而是eat()方法要在测试类中调用才能执行?
请问在java入门第二季3-4,1分44秒
在测试类中只创建了子类对象,为什么在测试类里没有调用父类和子类中的方法,结果里面父类的Animal()方法和子类里面的Dog()方法执行了,而父类中同一级别的eat()没有执行?
而是eat()方法要在测试类中调用才能执行?
2017-12-04
兄弟,才学编程不久吧。。。要想了解原理是需要自己去看书或者网上查资料的,废话不多说,解释如下:
你说的Animal()和Dog()叫做午餐构造函数,Dog类是Animal的子类,在创建dog对象时候,系统会默认初始化,也就是调用类内的构造函数,如果你没有重写构造函数,系统会自动调用默认的无参构造函数进行对象的初始化,由于继承关系,会首先调用Animal(),再调用Dog(),这是构造函数的调用顺序,如果实在理解不了,你就可以想象一下,一个子类,继承了父类,子类里是要有父类的属性的,所以需要将父类继承的属性先初始化,再初始化自己的属性,已达到创建对象完整初始化的目的,如果还是不懂,就再看一遍视频,业精于勤。。。
再说一下eat(),这个方法基于重写的普通方法,如果你自己不用父类的对象主动调用,子类的对象调用eat()的话,系统是不会像调用构造函数一样先调用父类的eat()的,这个就相当于你和你父亲,都需要吃饭,但是你父亲喜欢吃鱼,你喜欢吃肉一样,不能说你自己一个人吃饭,还得必须让你父亲先吃鱼的道理。。。
纯手打,如果还有什么不懂,大家互相学习。。。
举报