子类能否重载父类方法
百度百科是这样定义重载的,overload可直译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。
按我自己的理解重载针对的是方法而言,同名方法因参数不同而发生重载。而这些方法应该在同一个类里,如果不在同一个类里就可以直接根据类名的来区别,并不需要使用参数区分。子类重载父类方法,是因为子类能够继承父类的所有方法,所以发生重载的本质还是在同一个子类中。
说再多都不如代码来的简单直接:
public class A {
private void A1(){
System.out.println("父类私有");
}
public void A2(){
System.out.println("父类公有");
}
}
public class B extends A {
private void A1(int a){
System.out.println(a);
}
public void A2(int a){
System.out.println(a);
}
public static void main(String[] args) {
B b = new B();
b.A1(1);
//b.A1();编译报错
b.A2();
b.A2(1);
}
}
输出结果:
1私有
父类公有
1公有
根据上面的代码可以得出结论,子类可以重载父类公有方法,但是不能重载父类私有方法。
原因是因为子类可以继承父类的所有方法,但是子类无法直接(重点)使用私有属性和方法。通俗说就是父类所有的方法和属性我都有,但是私有的我不能用。