Java中的权限修饰符
时间:2018-12-20作者:华清远见
java面向对象的基本思想之一是封装细节并且公开接口。Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。访问控制分为四种级别: (1)public: 用public修饰的类、类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问; (2)protected: 用protected修饰的类、类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问(包外的子类可以用Super来访问),protected重点突出继承; (3)default: 如果一个类、类属变量及方法没有用任何修饰符(即没有用public、protected及private中任何一种修饰),则其访问权限为default(默认访问权限)。默认访问权限的类、类属变量及方法,包内的任何类(包括继承了此类的子类)都可以访问它,而对于包外的任何类都不能访问它(包括包外继承了此类的子类)。default重点突出包; (4)private: 用private修饰的类、类属变量及方法,只有本类可以访问,而包内包外的任何类均不能访问它。 (1)适用范围<访问权限范围越小,安全性越高>,如图所示:
(2)类的修饰符:public:主类。 一个文件中只能有一个主类。 主类整个项目下都可以使用。 default:其他类。不能跨包使用。 成员(变量和方法 ,本包可以使用。成员变量成员方法):public protected default private public:在整个项目下都可以使用。 default:在本包内可以使用,不能跨包。 private:只有本类可以使用。其他类都不能使用。 protected:不能跨包,但是跨包类如果是该类的子类,就可以用。用super来访问父类的成员 构造方法: public protected default private和成员的使用是一样的,没有任何区别。 例: package com.fs.test; import com.fs.TestAccess02; /*为什么protected修饰的成员变量hight 可以在B类使用 A类就不行、 * * 因为protected修饰的关键字,虽然不能跨包使用。但是可以在子类中使用。 * * */ public class A { public static void main(String[] args) { //Test1是public修饰的类,是可以跨包使用的。 TestAccess02 t =new TestAccess02(); //default修饰的类,在其他包中不能使用。 // T t2 =new T(); //public修饰的成员变量age 是可以跨包使用的。 System.out.println(t.age); //default修饰的成员变量name。 不可以跨包使用 // System.out.println(t.name); //protected修饰的成员变量hight 不能跨包使用。 // System.out.println(t.hight); } } class B extends TestAccess02{ public void method(){ //protected修饰的成员变量hight 可以在不同包子类中使用。 System.out.println(super.hight); } } TestAccess02位于:package com.fs A位于:package com.fs.test B 位于:package com.fs.test,但是却是TestAccess02的子类 结论:protected修饰符所修饰的类(这句话中指父类)属成员变量和方法,只可以被子类访问,而不管子类是不是和父类位于同一个包中。default修饰符所修饰的类属成员变量和方法,只可被同一个包中的其他类访问,而不管其他类是不是该类的子类。protected属于子类限制修饰符,而default属于包限制修饰符。 发表评论
|