java访问控制符是什么?java 的访问修饰符是什么
大家好,感谢邀请,今天来为大家分享一下java访问控制符是什么的问题,以及和java 的访问修饰符是什么的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
java 的访问修饰符是什么
Java中的访问修饰符
Java面向对象的基本思想之一是封装细节并且公开接口。Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。访问控制分为四种级别:
(1)public:用public修饰的类、类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问;
(2)protected:用protected修饰的类、类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问(此处稍后解释),protected重点突出继承;
(3)default:如果一个类、类属变量及方法没有用任何修饰符(即没有用public、protected及private中任何一种修饰),则其访问权限为default(默认访问权限)。默
认访问权限的类、类属变量及方法,包内的任何类(包括继承了此类的子类)都可以访问它,而对于包外的任何类都不能访问它(包括包外继承了此类的子类)。default重点突出包;
(4)private:用private修饰的类、类属变量及方法,只有本类可以访问,而包内包外的任何类均不能访问它。
网上一些资料及一些书上用表格对java访问修饰符做了清楚的总结,如下表所示:
重要总结:通过上面的分析,我们可以看到:
1.public、private和protected对我们来说没有任何异议。
2.顶层类只能用public访问修饰符和default(默认)访问修饰符修饰,其中用默认修饰符修饰的类(及没有任何修饰符的类,如class B{})不能被其他包中的类继承,这也说明了default(默认)访问修饰符突出的是包权限
3. protected:本人做了一次实验,发现在不同包的子类中,new一个父类对象,并用该父类对象去访问父类中的用protected修饰的类属变量和方法时不能访问,而new一个子类对象时,子类对象可以访问(说明protected修饰的类可以被其他包中的类继承)。也可以在子类重写父类的方法中使用super关键字调用。这岂不是和上面表格中的总结(红色对勾)冲突了?本人也是百思不得其解。最后在网上找到了一个相对比较认可的解释,如下:
protected修饰符的修饰的成员变量和方法也称为受保护的成员变量和方法,受保护的成员变量和方法可以在本类或同一个包中的其它类(包括子类)中通过类的实例进行访问,也可以被同一个包中的类或不同包中的类继承,但是不能在不同包中的其它类(包括子类)中通过类的实例进行访问。
4.如果一个类使用public修饰,那该类的类名必须与他所在的源文件名相同。一个.java源文件中有且只有一个public类,顶层类只能用public和默认修饰符(即无修饰符)修饰;
5.final修饰的类不能被继承,没有子类。
6.abstract修饰的类不能被实例化,必须被子类继承。类只要有一个抽象方法就必定是抽象类,但抽象类不一定要有抽象方法。
最终总结,就一句话:protected修饰符所修饰的类(这句话中指父类)属成员变量和方法,只可以被子类访问,而不管子类是不是和父类位于同一个包中。default修饰符所修饰的类属成员变量和方法,只可被同一个包中的其他类访问,而不管其他类是不是该类的子类。protected属于子类限制修饰符,而default属于包限制修饰符。
JAVA中类及类成员的访问控制符包括
public:
可以在任何地方进行访问,不受任何约束;
protected:
可被子类访问,不管是同一个包还是不同包
同一个包中非子类需要通过对象访问
private:
只能够被本类中的其它成员访问,而不能从类的外部进行访问
缺省:称为friendly,可被同一包的所有的类访问
final:
final修饰的类表示这个类不可被继承,被称为最终类
Static:
不能用来修饰类,可以用来修饰变量,用static修饰的变量称为静态变量,可以直接通过
类名.变量名
来调用
Java中的四种访问控制域是什么
所谓访问控制域其实就是访问权限.
访问权限的等级最大到最小依次是:public,protected,包访问权限(无关键字)和private。
成员的访问权限取得对某成员(属性和方法)的实现方法有下面四种情况
1,权限设置为public; 2,默认包访问权限,在同一包中的其他类,可以访问; 3,权限设置为public或者protected,通过继承的子类可以访问; 4,设置为private,提供访问器和变异器方法(get/set);
下面介绍这四种权限(相对成员而言)
1,包访问权限,在同一包中的类可以访问; 2, Public:接口访问权限,任何类都可以访问; 3, Private:你无法访问,除了包含该成员的类,其他类都可以访问。 4, Protected:继承访问权限,包括包访问权限。在同一包中,还有就是子类可以访问。
类的访问权限类的访问
只有两种:包访问权限或public(用法同上)如果不希望其他类拥有该类的访问权限,可以把这个来说有的构造器制定为private(比如单列模式)。
Java 访问控制修饰符
帮你找了一篇博客,写的很好:http://xuyanzhi6688.blog.163.com/blog/static/2920588920115178519198/
public:能被所有的类(接口、成员)访问。
protected:只能被本类、同一个包中的类访问;如果在其他包中被访问,则必须是该成员所属类的子类。
private:成员变量和方法都只能在定义它的类中被访问,其他类都访问不到。对成员变量的进行获取和更改,一般用get(),set(),public方法。实现了Java面向对象的封装思想。
friendly(缺省):访问权限与protected相似,但修饰类成员时不同包中的子类不能访问。
static:修饰变量,称为类变量或静态变量。静态变量是和类存在一起的,每个实例共享这个静态变量,在类加载时初始化。
final:被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取不能更改。修饰类是不能派生出子类,修饰方法时,不能被当前子类的方法覆盖。
abstract:不能创建abstract类的实例。一般被继承,实现抽象方法。类只要有一个abstract方法,类就必须定义为abstract,但abstract类不一定非要保护abstract方法不可。
如果对你有帮助请采纳,谢谢!
关于java访问控制符是什么,java 的访问修饰符是什么的介绍到此结束,希望对大家有所帮助。