日期:2014-05-20  浏览次数:20742 次

父类的引用指向子类的对象 为什么只能调用继承自父类的方法,而不能调用其他方法?
Java code


 class Base
{
   public void men1()
  {
   System.out.println("base men1 called_______");
  }
  public void men2()
  {
   System.out.println("base men2 called_______");
  }

}
 class Sub extends Base
{
    private void men1()//报错
  {
   System.out.println("Sub men1 called_______");
  }
  public  void men2()
  {
   System.out.println("Sub men2 called_______");
  }
  public  void men3()
  {
   System.out.println("Sub men3 called_______");
  }
}
 public class test
 {
     public static void main(String arg[])
     {
         Base base=new Sub();
         base.men2();
         
     }
 }


1、为什么注释的部分会报错,为什么复写父类的方法的时候不能降低访问控制?
2、为什么Base base=new Sub(); base不能调用men2() 只能调用继承自父类的方法?
希望大家不要轻易的丢下一句多态。多分析下原因。、谢谢了 


------解决方案--------------------
1。父类的public是向外提供的接口,也是一种向客户程序的约定,因为子类可以替代父类,所以必须遵从这种约定。protected可以认为是向子类提供的约定,同理。

2。当你使用base调用方法的时候,编译器只知道它的类型是Base,所以只能使用Base定义的方法。
至于调用时能正确调用base所指向的实际对象的方法,那就是多态了,是运行的时候发生的行为。