题目:如果现在父类的一个方法定义成private访问权限,在子类中将此方法声明为default访问权限,那么这样还叫重写吗?
答:不是。因为private关键字的定义是“除了包含该成员的类之外,其他任何类都无法访问这个成员.”,也就是说只有自己才能直接访问到private成员,其他任何类,包括子类都无法访问到这个成员。
我们可以来写两个类测试一下:
1.先写一个正常的重写方法
public class OverWrite1 {
public static void main(String[] args){
new Son().fun();
}
}
class Father{
public void fun(){
this.print();
}
public void print(){
System.out.println("Father");
}
}
class Son extends Father{
public void print(){
System.out.println("Son");
}
}
结果为:
2.再写一个父类方法为private的:
public class OverWrite2 {
public static void main(String[] args){
new Son().fun();
}
}
class Father{
public void fun(){
this.print();
}
private void print(){
System.out.println("Father");
}
}
class Son extends Father{
public void print(){
System.out.println("Son");
}
}
结果为:
由此可见,在这种情况下子类的方法在重写时,由于“看不到”父类的方法,变成了一个新的方法,在调用方法时,只会用父类私有方法。