类的继承概念是这样:如果子类的构造函数中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其他构造方法,那么在产生子类的实例时,系统默认调用父类的无参构造函数。 在Main入口函数执行时遇到A a = new B();需要进行实例化,所以在实例化B()的时候,因为B继承自A类,所以首先需要执行A的构造函数,然后打印出A,然后在返回来打印出B,然后a.Fun(),调用方法,发现此方法是A类的虚方法,B类重写了,所以会执行B类的重写的方法,则打印出B.Fun() 祝你在前进的路上一路好运,哈哈哈
所以要先执行CLASS A.
a是CLASS A的实例,虽然是用CLASS B的构造将它实例化的,但是也要先构造出CLASS A
a.Fun(); //调用A的fun方法//结果
A
B
A.Fun()
只有先把[汽车]所具有的共性构造出来 才能继续构造[奔驰]从内存模型的角度来说 B类实例分配的空间 开始是他的父类A的空间 如果A还有父类 还会先为其分配空间
这个也决定了构造顺序 因为要知道分配多少空间
在Main入口函数执行时遇到A a = new B();需要进行实例化,所以在实例化B()的时候,因为B继承自A类,所以首先需要执行A的构造函数,然后打印出A,然后在返回来打印出B,然后a.Fun(),调用方法,发现此方法是A类的虚方法,B类重写了,所以会执行B类的重写的方法,则打印出B.Fun()
祝你在前进的路上一路好运,哈哈哈