[转] Java中的访问控制

可见/访问性 在同一类中 同一包中 不同包中  同一包子类中  不同包子类中 
 public  yes  yes  yes  yes  yes
 protected   yes  yes  no  yes  yes
 package   yes  yes  no  yes  no
 private  yes  no  no  no  no

(1) 在java中有public、protected、private三种显示的修饰符用于控制可见性,package不是显示的修饰符,它是隐含的,即如果 在类、变量等前没加显示的可见性修饰符,那它就是package级别的。如果在类的定义中没有指定package,那么java会把它放在缺省包中,一般 来说这个缺省的包就是当前目录。
(2) 在子类中的方法如果重载了父类的方法,那么该方法的可见级别应更底或者相同,如父类中的方法是public,那么子类中方法必须是public。
(3) 在java中,一般来说,变量成员最好是private,对它们的访问可以通过public的方法,在这些方法中可以做些控制以保证数据的一致性。这些方法名一般以get和set做为前缀。

1.类(class)
可见性修饰符: public―在所有类中可见,在其他包中可以用import导入。
             缺省―就是没有修饰符,在同一个包中的类中可见,在其他包中不能用import导入。
              修饰符:final―终态类,表示该类不能被继承 
                            abstract―抽象类,不能新建对象 
2.       变量(variable)
Java中变量有两种,方法变量和字段变量
方法变量只能用一个修饰符:final―表示常量,不能修改
下面是字段变量的修饰符
        可见性修饰符:public―在任何类中可见
                             protected―       在子类中或同一个包中可见
                             private―只在本类中可见,子类中也不可见
                             缺省―在同一个包中可见,子类不在一个包中,子类中也不可见   
        修饰符:static―静态变量,被类的所有实例共享
                      final―常量,定义后不能修改
*transient―告诉编译器,在类对象序列化的时候,此变量不需要持久保存 
*volatile―指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理 
这两带*的不是很常用,但也是Java的修饰符,我也不是很清楚
3.方法(method)
   可见性修饰符:public―在任何类中可见
                             protected ―在子类中或同一个包中可见
                             private―只在本类中可见,子类中也不可见
                                   缺省―在同一个包中可见,子类不在一个包中,子类中也不可见
   修饰符: static―静态方法,并不需要创建类的实例就可以访问静态方法
                      final―常方法,所有子类不能覆盖该方法,但可以重载
                      abstract―抽象方法,在抽象类中没有实现的方法
                      native―本地方法,参见Java Native Interface(JNI) 
synchronized ―在多线程中,synchronized方法调用时,其他所有方法不能调用该方法
3.       接口(interface)
         可见性修饰符:public―所有类中可见
                       缺省―同一个包中可见
         接口中的变量总是需要定义为“ public static final 接口名称”,但可以不包含这些修饰符,编译器默认就是这样   
      
         接口中的方法只能使用public和abstract修饰符

1.private :(妻子) 只有自己能用。
2.public :(J女)谁都可以用。
3.protected:(家里的钥匙)只有家人可以用。
4.friendly:(公共客厅) 你和别人合租房子,公共客厅就是friendly 。

上一篇:9月23日JavaScript作业----子菜单下拉


下一篇:java web重定向与转发