当遇到类A的内部类B时,内部类B中private,protected 这些关键字对类A将不再起任何保护作用
2012-07-10 18:45
232 查看
今天在Android的开发环境中做了一个测试, 类A中加了一个内部类B, B类中有private, protected, public等属性和方法,结果在类A中的public 方法中访问类B中的所有成员都没报错,很是诧异。
按照我的理解,起码类B中的所有private成员不能被类A访问,结果类A不仅访问了,而且没报任何错误。
后来想了一下,java中每个.java文件中只能有一个类,而且类的名字需同文件名字相同,而private,protected关键字应该只是在不同文件、不同包间起保护作用,而在在同一文件的同一类中是没有限制的, 因为B类在A.java 的A类中,所以B中的所有成员对A类来讲都是透明可见的,无论其属性是public, 还是protected,private。
public class A{
public void methodA(){
B class_b = new B();
class_b.b1 = 0;
class_b.b2 = 0;
class_b.methodB1();
class_b.methodB2();
//以上编译、调用全部通过且无错
}
private class B {
private int b1;
protected int b2;
public int b3;
private void methodB1()
{
}
protected void methodB2()
{
}
public void B3()
{
}
}
按照我的理解,起码类B中的所有private成员不能被类A访问,结果类A不仅访问了,而且没报任何错误。
后来想了一下,java中每个.java文件中只能有一个类,而且类的名字需同文件名字相同,而private,protected关键字应该只是在不同文件、不同包间起保护作用,而在在同一文件的同一类中是没有限制的, 因为B类在A.java 的A类中,所以B中的所有成员对A类来讲都是透明可见的,无论其属性是public, 还是protected,private。
public class A{
public void methodA(){
B class_b = new B();
class_b.b1 = 0;
class_b.b2 = 0;
class_b.methodB1();
class_b.methodB2();
//以上编译、调用全部通过且无错
}
private class B {
private int b1;
protected int b2;
public int b3;
private void methodB1()
{
}
protected void methodB2()
{
}
public void B3()
{
}
}
相关文章推荐
- java作用域关键字public ,private ,protected 及不写时的区别
- 作用域public,private,protected,以及不写时的区别
- C++ 类关键字public、protected、private区别
- Public,Private,Protected,Published作用域
- C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承
- java作用域public ,private ,protected 及不写时的区别
- java作用域public ,private ,protected 及不写时的区别
- java基础 5、作用域public,private,protected,以及不写时的区别
- iOS @synchronized关键字 线程保护锁作用
- java作用域public ,private ,protected 及不写时的区别
- public,private,protected在C++中的作用
- java 修饰符的作用一(public protected default private 组)
- 第十章 内部类 内部类的作用、闭包、内部类继承、覆盖重写内部类、局部内部类、内部类标识符
- JAVA作用域作用域public,private,protected
- 作用域public,private,protected,以及不写时的区别
- C++关键字: public, private, protected
- Java中private , public , protected 几个关键字
- Java private和protected修饰的内部类调用方法
- java作用域public ,private ,protected
- public公有继承,protected保护继承,private私有继承