在给出的以下代码中,我了解第一部分,当我调用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()
答案 0 :(得分:0)
好吧,我们走吧。
在Base类的定义中,pac()方法具有程序包私有的可见性,也就是说,它只能用于同一程序包中的类。由于Concrete1不在同一个程序包中,因此只能覆盖具有公共/受保护可见性的方法。
Concrete2与Base(P1)处于同一软件包中,这说明了为什么它可以覆盖pac()以及这两种情况的输出差异。