Переопределение метода: в расширенных классах - PullRequest
0 голосов
/ 15 января 2019

В приведенном ниже коде я понимаю первую часть: когда я вызываю функцию c1.show (), она переопределяет только открытую и защищенную части. Но я не понимаю, когда я вызываю c2.show (), почему он также переопределяет pac ().

  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 ()

package P1;

 import P2.Concrete1;

  public class Concrete2 extends Concrete1 {
   public void pri( ) { System.out.println(“Concrete2.pri()”); }
   public void pac( ) { System.out.println(“Concrete2.pac()”); }
   public void pro( ) { System.out.println(“Concrete2.pro()”); }
   public void pub( ) { System.out.println(“Concrete2.pub()”); }
  } 


   Concrete2 c2 = new Concrete2();
   c2.show( );

Выход:

Base.pri ()

Concrete2.pac () * * тысяча двадцать одна

Concrete2.pro ()

Concrete2.pub ()

1 Ответ

0 голосов
/ 15 января 2019

Ну, поехали.

В определении класса Base метод pac () имеет видимость частного пакета, то есть он доступен только для классов в одном пакете. Поскольку Concrete1 не входит в тот же пакет, он может переопределять только методы с публичной / защищенной видимостью.

Concrete2 находится в том же пакете Base (P1), это объясняет, почему он может переопределить pac (), а также разницу в выходных данных двух случаев.

...