1.class Parent {
private void method1(){
System.out.println("Parent's method1()");
}
public void method2(){
System.out.println("Parent's method2()");
method1();
}
}
public class Child extends Parent{
public void method1(){
System.out.println("Child's method1()");
}
public static void main(String[] args) {
Parent p=new Child();
p.method2();
}
}
输出:Parent's method2()
Parent's method1()
2.class Parent {
void method1(){
System.out.println("Parent's method1()");
}
public void method2(){
System.out.println("Parent's method2()");
method1();
}
}
public class Child extends Parent{
public void method1(){
System.out.println("Child's method1()");
}
public static void main(String[] args) {
Parent p=new Child();
p.method2();
}
}
输出:Parent's method2()
Child's method1()
分析:1.多态new的对象,调用的方法是父类中一定存在的,否则编译不通过.如果调用的方法不是私有的,则会先去到子类中,查找该方法有没有被子类覆盖,如有,执行子类方法;如无,执行父类方法,即使子类中存在参数类型最匹配的方法也不会被执行.
2.private是私有的,其他类是不能访问的,子类也不可以访问,所以你可以重新实现父类的该方法,不会有冲突,但是你重新实现的方法,不叫重写也不叫重载,是一个该子类新增的方法,和子类的一般扩展方法一样.所以例1中父类方法method1是private的,不能被子类覆盖,所以调用的是自身的方法