答案是可以的,使用super对父类的方法进行调用。
class Animal{ public void printWhoIAm(){System.out.println("Animal")} } public class Dog extends Animal{ //加上注解@Override可以强制进行重写的检查 防止自己重写错误 @Override public void printWhoIAm(){System.out.println("Dog")} public void print(){ super.printWhoIAm(); printWhoIAm();// this.printWhoIAm(); } public static void main(String args[]){ Dog dog = new Dog(); dog.print(); } } /* output: Animal Dog */使用this.方法()会先在本类中查找是否存在要调用的方法,如果不存在则查找父类中是否具备此方法。如果有则调用,否则出现编译时错误。
使用super.方法()会明确表示调用父类中的方法,直接去父类寻找要调用的方法。
重载和重写的区别 区别 重载 重写参数列表 必须改 一定不能改
返回类型 可以修改 一定不能改
访问控制权限 可以修改 不能比父类严格
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
发生范围 可以在一个类中也可以在子类中 在子类中
小结
需要注意的是重载和重写的定义形式。引用菜鸟教程的两句话和一张图结束。
方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)
参考:
[1] Eckel B. Java编程思想(第四版)[M]. 北京: 机械工业出版社, 2007
[2] 菜鸟教程. Java 重写(Override)与重载(Overload) |[EB/OL]. /2019-02-18. https://www.runoob.com/java/java-override-overload.html.