当Base类中的display方法声明为private的时候测试类输出aaaa
当Base类中的display方法声明为public的时候测试类输出aaaabbb
那么原因是什么呢?public class Base {

public Base(){
dispaly();
}
private void dispaly(){
System.out.println("aaaa");
}
}
public class Derived extends Base{
public void dispaly(){
System.out.println("aaaa" + "bbb");
}
}
public class Test { public static void main(String[] args) {
new Derived();
}}

解决方案 »

  1.   

    补充:我理解后一个输出结果的原因,但不理解第一个。private声明对重写后的方法调用有什么影响呢?
      

  2.   

    private它是私有的,只有当前类可以访问,子类是不能使用的,重写的前提是子类可以访问父类的方法。所以当父类的display方法为private时,子类的display方法就不叫从写了。
      

  3.   

    private是不可以继承的,而public可以!
    new Derived();这句会调用Derived();的构造函数,而Derive()又有父类Base();所以会先调用Base();的构造函数,输出"aaaa"!所以不管你定义的是Private还是Public,"aaaa"都会输出,因为你是在父类中调用的父类的函数!
      

  4.   

    有影响,如果你在A类从从写了它父类的方法,你在通过A类实例话对象后调用的方法就是A类中的方法,不会调用它的父类的方法,当你调用的方法在A类中没有时(即不存在从写)它才会去调用父类的方法。如果你通过父类A1实例化对象,那么调用的就是父类自己的方法.这个相当于覆盖一样。
      

  5.   

    私有方法,不能被重写。所以会输出aaaa;如果是公有的,就被子类的方法重写了,调用的时候,自然是aaabbb!