В приведенном ниже коде я понимаю первую часть: когда я вызываю функцию 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 ()