Java继承中的方法重写

时间:2012-09-15 04:01:42

标签: java inheritance

package P1;

public class Base {

   private void pri( ) { System.out.println("Base.pri()");  }

   void pac( ) {  System.out.println("Base.pac()");  }

   protected void pro( ) { System.out.println("Base.pro()"); }

   public void pub( ) { System.out.println("Base.pub()"); }

   public final void show( ) {
       pri();  
       pac();  
       pro();  
       pub(); 
   }    
} 

package P2;

import P1.Base;

public class Concrete1 extends Base {
   public void pri( ) { System.out.println("Concrete1.pri()"); }
   public void pac( ) { System.out.println("Concrete1.pac()"); }
   public void pro( ) { System.out.println("Concrete1.pro()"); }
   public void pub( ) { System.out.println("Concrete1.pub()"); }
}

我正在执行

Concrete1 c1 = new Concrete1();
c1.show( );

现在,输出显示为

  

Base.pri()
      Base.pac()
      Concrete1.pro()
      Concrete1.pub()

有人可以解释为什么会这样吗?根据我对继承的理解, 已经发生了:

1)P2.concrete1继承P1.Base
2)创建了具体1的c1对象 3)调用c1.show()。由于P1.Base.show()是public,因此可以调用它 4)现在,在继承之后的P2.concrete1中,只有它自己的方法(pri,pac,pro,pub)和P1.Base的可继承方法(pro,pub,show)都可以访问。

现在为什么它们甚至无法访问时会在输出中显示Base.pri()和Base.pac()?

很明显,我对继承没有一个非常明确的基本理解。有人可以解释这种情况以及继承实际上是如何“结构化”的。我曾经认为超类的可继承方法和字段会叠加到子类上。但这种推理显然是错误的。

谢谢!

0 个答案:

没有答案