java继承与继承中子类覆写父类方法的注意事项

java继承与继承中子类覆写父类方法的注意事项_第1张图片

运行结果: lixinghua

原因:main函数里面,new Student()访问的fun()函数在子类中找不到,则从父类Person中查找;父类中的fun()函数调用当前类的print()函数,所以继续查找父类的print()函数,发现该函数访问权限为private,即不能被子类所继承或覆写,所以最终执行父类的print()函数

java继承与继承中子类覆写父类方法的注意事项_第2张图片

执行结果:nanjinqin

原因:main函数里面,new Student()访问的fun()函数在子类中找不到,则从父类Person中查找;父类中的fun()函数调用当前类的print()函数,所以继续查找父类的print()函数,发现该函数访问权限为默认default,即可以被子类所继承或覆写,再去子类找是否有覆写的print()函数,有,则执行子类覆写后的print()函数

java继承与继承中子类覆写父类方法的注意事项_第3张图片

 执行结果:nanjinqin

原因:main函数里面,new Student()访问print(),即在子类中找到print()方法并执行

java继承与继承中子类覆写父类方法的注意事项_第4张图片

 执行结果:Exception in thread "main" java.lang.StackOverflowError

原因:main函数里面,new Student()访问print(),即在子类中找到print()方法并执行,执行过程中调用fun()函数,再在当前类(即子类)中找fun()函数,当前类不存在则去父类中寻找并执行fun()函数,父类fun()函数调用当前类(即父类)的print()函数,由于父类的print()函数被子类覆写,于是执行子类覆写后的print()函数,造成对象之间相互引用,最终会导致栈溢出;如果将父类print()函数的public权限修改为private,则直接执行父类print()函数,输出结果为lixinghua

java继承与继承中子类覆写父类方法的注意事项_第5张图片

执行结果:lixinghua

原因:main函数里面,new Student()访问子类的print()函数,其中调用了父类的fun()函数并执行结果

java继承与继承中子类覆写父类方法的注意事项_第6张图片

执行结果 :nanjinqin

原因:main函数里面,new Student()访问子类的print()函数,其中调用父类的fun()函数,fun函数调用当前类(即父类)的study函数,而study()函数被子类覆写过,所以最终执行子类的study()函数

 

 

你可能感兴趣的:(java继承与继承中子类覆写父类方法的注意事项)