2 回答

TA贡献1848条经验 获得超2个赞
代码里面你的子类覆盖了父类的show()方法,你用一个父类的引用指向一个子类的对象,如果子类中覆盖了父类的show()方法,你就只能用子类覆盖过的show()方法!
这个问题分几种情况,现在就按情况来分析一下:
1、在子类中调用父类中被子类覆盖的方法:
这个情况就是您说的用super来显示的调用。因为在子类中还有一个和父类同样的方法,如果你只写方法名子,编译器不可能知道你想要掉的是哪个方法,他自作聪明的回去调用子类当中的那个。所以这种情况下,你要用super来显示的说明你要调用的是父类中的方法!
2、在其他类中的调用父类方法:
这种情况就在简单不过了。你创造(New出来的!)的是哪类对象(父类对象或是子类对象)他就会去调用父类或是子类中的相应的方法,这个和多态不冲突!
3、静态方法:
静态方法的调用是和类绑定的,类的静态方法又叫类方法,也就是这个方法是属于这个类的,而不是属于这个类创建出来的某个对象的。所以静态方法的调用要用“类名.静态方法名”来调用! 对了,静态方法的调用是需要在另外一个静态方法中的哦,否则编译会错误的!

TA贡献2021条经验 获得超8个赞
FatherException f=new SonException(); - 将子类向上转型为父类,对于上转型对象,若子类复写了父类的方法,则仍然调用的是子类方法。
从更本质的角度来说,对于类里面的非静态方法,默认会传入this参数,于是在方法里访问其他非静态方法时,实际这些被访问的方法前面会有默认带上this,表示这个方法归属于哪个对象。
你可以在FatherException f=new SonException();下面加上这行代码:
System.out.println(f);
就知道f所表示的实际对象了。
添加回答
举报