Java访问控制符原理及具体用法解析

网友投稿 283 2022-11-15


Java访问控制符原理及具体用法解析

java包中的相关概念

包的概念

Java中的包类似于操作系统中的文件夹,将具有类似功能的类或者相同的类放在相同的包里面,便于组织与管理

包的作用

1.一是开发过程中避免类名重复问题;

2.二是对代码整理归类,将功能相近的类放到一个包中管理;

3.三是限定访问权限(default)就是包访问权限。

简述调用某个包中的类的三种方式

8195;1>使用一个类的全名:即包名+类名

jsdzqYJ8195;  注意:在包中,所有类对真正名字将是包名+类名的组合,所以在运行的时候要将包层给写上,不能直接写类名。

2>使用import语句导入一个包中的所有的类。

3>使用import语句导入一个包中的特定的类。

Java中访问控制符的具体用法

为什么需要控制对成员的访问?

第一个原因是防止程序员接触他们不该接触的东西---通常是内部数据类型的设计思想。

进行访问控制的第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。Java的访问控制级别分类

1.类访问控制级别

public

 default(默认的,什么都不用写,包内访问控制符)

2.对象访问控制级别

public:它修饰的成员没有限制,任何包中的任何类都能访问。

 protect:它修饰的只能被同一个包中的类访问,或者不同包中的子类访问。

 default:只能被同一个包中的类访问,包括同一个包中的子类。

 private:只能被同一个类中的方法访问。

访问权限

访问权限

同一个类内部

同一个包内部

不同包中的子类

不同包的非子类

public

protected

default

private

总结:

1>在一个类的内部,访问控制符是透明的,失效的

2>在同一个包的内部,只有private有成员不能进行访问

3>在不同包存在继承关系的两个类之间,只有public成员和protected成员可以进行访问

4>在不同包之间,只有共有成员可以进行访问

代码演示

(1)在一个类的内部,所有的成员彼此之间都可以进行相互访问,访问控制符是透明的,失效的,共有的可以调用私有的,私有的可以调用共有的。

package com.vg.demo01;

public class TestAccessModifier {

public void test1(){

System.out.println("我是public");

}

protected void test2(){

System.out.println("我是protected");

}

void test3(){

System.out.println("我是default");

}

private void test4(){

System.out.println("我是private");

}

public static void main(String[] args) {

TestAccessModifier t=new TestAccessModifier();

t.test1();

t.test2();

t.test3();

t.test4();

}

}

我是public

我是protected

我是default

我是private

(2)在同包不同类之间,只有其私有成员不可以通过类对象名的方式进行访问,共有成员和保护型的成员都可以通过这种方式进行访问. 简言之:在同一个包的内部,只有其私有成员不能够进行访问

package com.vg.demo01;

//private是不能在同包的子类中起作用的。

public class TestAccessModifierSon extends TestAccessModifier{

public static void main(String[] args ) {

TestAccessModifierSon s = new TestAccessModifierSon();

s.test1();

s.test2();

s.test3();

}

}

我是public

我是protecJsdzqYJted

我是default

package com.vg.demo01;

//非子类,在同一个包中,没有继承父类,即不是它的子类,private同样不能发挥作用

public class TestAccessModifierNotSon {

public static void main(String[] args ) {

TestAccessModifierSon s = new TestAccessModifierSon();

s.test1();

s.test2();

s.test3();

}

}

我是public

我是protected

我是default

(3)在不同包存在继承关系的两个类之间,只有共有类的共有成员和共有类的保护型成员才可以被另外一个包中的子类进行访问,但是在一个子类的外部,只有共有类的共有成员才可以被直接的访问.

package com.vg.demo02;

import com.vg.demo01.*;

//在不同的包中,类的子类只有public、protected这俩个可以产生效果

public class TestAccessModifierOtherSon extends TestAccessModifier{

public static void main(String[] args) {

TestAccessModifierOtherSon th =

new TestAccessModifierOtherSon();

th.test1();

th.test2();

}

}

我是public

我是protected

(4)在不同包无任何关系的两个类之间,只有共有类的共有成员才可以被另外一个包中的类进行访问.

package com.vg.demo02;

import com.vg.demo01.TestAccessModifier;

public class TestAccessModifierOtherNotSon {

public static void main(String[] args) {

TestAccessModifier t = new TestAccessModifier();

t.test1();

}http://

}

我是public


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot使用validation
下一篇:idea使用spring Initializr 快速搭建springboot项目遇到的坑
相关文章

 发表评论

暂时没有评论,来抢沙发吧~