class A { //1st code starts here
private void display() {
System.out.println("A class");
}
}
class B extends A {
protected void display() {
System.out.println("B class");
}
}
class Test {
public static void main(String args[]) {
A obj = new B();
obj.display();
}
}
输出:Test.java:22:错误:display()在A中有私人访问权限 obj.display();
class Outer{ //2nd Code starts here
class Inner1{
private void m2() {
System.out.println("Inner1 class");
}
}
class Inner2 extends Inner1{
protected void m2() {
System.out.println("Inner2 class");
}
}
public static void main(String args[]) {
Outer o=new Outer();
Outer.Inner1 i=o.new Inner2();
i.m2();
}
}
输出:Inner1类
为什么在第二个代码中输出Inner1类时在第一个代码中编译时间错误???
答案 0 :(得分:3)
Outer
类的代码可以访问Outer
类中声明的任何成员或方法,而不管访问级别如何。但是,被调用的m2
方法是基类Inner1
的方法,因为您无法覆盖private
方法。
另一方面,Test
类的代码无法访问不同类的private
方法,这就是代码无法通过编译的原因。
答案 1 :(得分:1)
因为私人成员只能在课堂上访问。 当B类扩展时,私人成员无法访问B. 对于Inner类,内部类是类的成员,并且可以访问封闭类的所有成员。