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

Java包中的相关概念

包的概念

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

包的作用

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

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

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

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

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

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

  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
我是protected
我是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();
	}
}

我是public

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 利用Java制作字符动画实例代码

    前言 今晚闲来无事,整理了一下电脑中尘封已久的旧代码,看着那些年自己写过的代码,踩过的坑,顿时老泪纵横.正当在感叹之际,突然发现在"马克思"文件夹下出现了一个好玩的项目,那就是N年前刚学Java时写的GIF转字符动画的小玩具,虽然是个小玩意,但是在当时能搞点东西出来还是非常有成就感的. 正文 效果展示 原图,某两年半练习生 转成字符动画后的练习生 实现原理 其实字符动画的实现原理比较简单,这里我们抛开GIF,直接拿一张静态图片来说明. 首先我们要把原图转成灰度图,这样图片中每个像素就只

  • Java从控制台接受输入字符的简单方法

    创建一个类,在该类的主方法中创建Scanner扫描起来封装System类的in输入流,然后提示用户输入身份证号码,并输入身份证号码的位数. 代码如下: 复制代码 代码如下: import java.util.Scanner;public class InputCode {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);// 创建输入流扫描器        Sy

  • 深入讲解Java中的流程控制与运算符

    Java流程控制 Java流程控制的语法与 C/C++ 类似,也有 if...else.while.do...while.for.switch...case等,这里不再讲述具体语法,仅举例说明. 输出九九乘法表(右上三角): public class Demo { public static void main(String[] args){ int i, j; for(i=1; i<=9; i++){ for(j=1; j<=9; j++){ if(j<i){ //打印八个空格,去掉空

  • Java四种访问控制修饰符知识点总结

    java有四种访问控制修饰符. public protected private default(默认为空,不加任何修饰) 为了用代码对比出其中的区别,首先建立两个包,分别为area1和area2:五个类,分别是Person.PersonDemo.PersonSon.PersonTest.OutPerson. 然后Person.PersonDemo.PersonSon放在area1包下. PersonTest.OutPerson放在area2包下. 四个访问控制修饰符在同类下的代码例子: pac

  • Java中关于控制台读取数字或字符串的方法

    Java中,int a = System.in.read();此句读取的是一个字符,然后返回的是对应字符的ASCII, 例如,控制台输入123,只读取一个字符1,对应的ASCII为49,则输出49,输入abc则读取a,对应的ASCII是97,则输出97: Scanner sc = new Scanner(System.in) int n = sc.nextInt();从控制台读取一个数. String c = sc.next();//从控制台读取字符串 以上就是小编为大家带来的Java中关于控制

  • Java import导入及访问控制权限修饰符原理解析

    这篇文章主要介绍了Java import导入及访问控制权限修饰符过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.import 1.import语句用来完成导入其他类,同一个包下的类不需要再导入 不在同一个包下需要手动导入. 2.import语法格式 import 类名: import 包名.*; //import语句需要编写到package语句之下,class语句之上. 3.java.lang.*;不需要手动引入,​系统自动引入.

  • java读取图片并转化为二进制字符串的实现方法

    本例子的目的在于测试往oracle数据库中插入blob字段 public static String getImgStr(String imgFile){ //将图片文件转化为字节数组字符串,并对其进行Base64编码处理 InputStream in = null; byte[] data = null; //读取图片字节数组 try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(da

  • java 二进制数据与16进制字符串相互转化方法

    二进制数据一般输入的格式是0x45, 0x3a, 0xc3, 这种数据格式看起来是16进制的字符串,但是实际上在存储的时候每个都对应一个字节,比如0x45的二进制字节就是0100 0101,对应的16进制字符串就是0x45.实际编程过程中,经常遇到这两种格式的相互转化,在此记录一下代码. 二进制数据转化为16进制字符串(中间加的':'还有':'是为了查看下标,也可以自行去掉): public static String bytesToHexString(byte[] src){ StringBu

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

    Java包中的相关概念 包的概念   Java中的包类似于操作系统中的文件夹,将具有类似功能的类或者相同的类放在相同的包里面,便于组织与管理 包的作用   1.一是开发过程中避免类名重复问题:   2.二是对代码整理归类,将功能相近的类放到一个包中管理:   3.三是限定访问权限(default)就是包访问权限. 简述调用某个包中的类的三种方式   1>使用一个类的全名:即包名+类名     注意:在包中,所有类对真正名字将是包名+类名的组合,所以在运行的时候要将包层给写上,不能直接写类名.  

  • Java访问权限原理与用法详解

    本文实例讲述了Java访问权限原理与用法.分享给大家供大家参考,具体如下: 构造者模式思想 进行初始化,解决了多个构造器重载,构造器参数过多记不住的情况. package day7;//声明一个程序包 class Employee{ private String name; private int no; private int age; private String sex; private String address; //alt + shift + s public int getNo(

  • java继承学习之super的用法解析

    继承supersuper关键字的用法和this关键字的用法相似this:代表本类对象的引用super:代表父类存储空间的标识(可以理解为父类对象引用) package com.ithema_20; /*   测试类   继承   super   super关键字的用法和this关键字的用法相似   this:代表本类对象的引用   super:代表父类存储空间的标识(可以理解为父类对象引用)  */ public class Demo {     public static void main(

  • Java内存分配多种情况的用法解析

    这篇文章主要介绍了Java内存分配多种情况的用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java内存五大区 栈:用于保存函数内部的局部变量,函数形参,一旦超出作用域,就删除 堆:凡是new出来的东西都是存放在堆里,也可以说可变对象(非基本数据类型)都是保存在这里面. 堆里面的东西,都有一个内存(16进制),栈中存放的就是这个16进制的内存值. 堆里面存放的东西都用默认值: 整数:默认值0 浮点数:默认0.0 布尔:默认false 字

  • Java Thread多线程详解及用法解析

    最全面的java多线程用法解析,如果你对Java的多线程机制并没有深入的研究,那么本文可以帮助你更透彻地理解Java多线程的原理以及使用方法. 1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread构造函数: public Thread( ); public Thread(Runnab

  • Java  Thread多线程详解及用法解析

    最全面的java多线程用法解析,如果你对Java的多线程机制并没有深入的研究,那么本文可以帮助你更透彻地理解Java多线程的原理以及使用方法. 1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread构造函数: public Thread( ); public Thread(Runnab

  • Java响应式编程之handle用法解析

    目录 Java handle用法 handle的标准使用方式 handle的基类 handle运用实例 Java handle用法 JAVA响应式编程reactor中如果需要对一个flux中的数据进行提前返回 可以使用handle 具体如下: @GetMapping("/a") public Mono<Object> a() throws InterruptedException { long begin = System.currentTimeMillis(); Mono

  • Java集合排序规则接口Comparator用法解析

    1. 前言 最近用到了集合排序(基于 Java 8).现在我能用 Stream 的就用 Stream ,真香!排序可以这么写: List<People> peoples = new ArrayList<>(); // 中间省略 // 按照年龄从小到大排序 peoples.sort(Comparator.comparing(People::getAge)); 这里排序用到了一个关键接口 java.util.Comparator.排序比较作为业务中经常出现的需求,我们有必要研究一下这个

  • Java图形界面Swing原理及用法解析

    这篇文章主要介绍了Java图形界面Swing原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JButton组件 布局管理器 FlowLayout 流式布局 BorderLayout 方位布局 GridLayout 表格布局 绝对布局 JLable 组件 文本框组件 JPanel轻量级容器 创建事件监听类 (更换监听类实现监听) 窗口监听适配器 都可使用匿名类实现监听 每个监听方法都可以返回一个Event对象来返回监听值 以上就是本

  • Java类加载器ClassLoader用法解析

    这篇文章主要介绍了Java类加载器ClassLoader用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 正文 当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载.连接.初始化3个步骤来对该类进行初始化.如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化. 一.类加载过程 1.加载 加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说

随机推荐