class Parent {    private void method1() {        System.out.println("Parent's method1()");    }    public void method2() {        System.out.println("Parent's method2()");
        method1();
    }}class Child extends Parent {    public void method1() {        System.out.println("Child's method1()");    }
}public class test3 {

public static void main(String args[]) {
Parent p = new Child();
p.method2();
}
}上面的这段代码为什么当Parent 类里面的method1不是private的时候输出为Child's m
ethod1(),而当Parent类里面的method1是private的时候输出的为Parent's method1()

解决方案 »

  1.   

    当method为private,不能被重写,所以输出父类的,非private时方法没子类重写了,所以输出子类的
      

  2.   

    您的问题是:当Parent类的method1为私有的时候.他不能被改写(override)所以P对象是父类的对象,当然就打印了父类的方法了.而当它不是私有的时候就可以发生改写 ,所以打印的是子类的方法.明白了吗?
    我认为这类问题有这样几种:
    1重载(overload):方法名称一定要一样.传入参数类型一定要不一样.发生在同一个类中.
    2遮蔽(shadow):在对象继承的过程中,在子类中可以直接使用从父类所继承下来的属性和方法.但是如果在子类中又生命了相同名称的属性时,这时你直接使用就是用你自己的而不是父类的了.
    3改写(override):对于方法就称为改写.对于属性叫遮盖.