`
249326109
  • 浏览: 53790 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java访问权限整理

    博客分类:
  • java
 
阅读更多

类实例化成对象之后,可以通过对象加上"."操作符访问和操纵该对象的域和方法,但是这种访问是有限制的,通过public、protected、default(啥都不写)、private来控制。

 

先看一个实验的例子:(不注释表示可以访问,注释掉表示无法访问)

 

 

 

package packageA;

import packageB.SubB;

public class Base {
    public String publicStr = "publicString";
    protected String protectedStr = "protectedString";
    String defaultStr = "defaultString";
    private String privateStr = "privateString";

    public void print() {
        System.out.println("packageA.Base has access to");
        System.out.println("    " + publicStr);
        System.out.println("    " + protectedStr);
        System.out.println("    " + defaultStr);
        System.out.println("    " + privateStr);

        Base b = new Base(); // -- other Base instance
        System.out.println("    b." + b.publicStr);
        System.out.println("    b." + b.protectedStr);
        System.out.println("    b." + b.defaultStr);
        System.out.println("    b." + b.privateStr);
        
        
        SubA subA=new SubA();
        System.out.println("    subA." + subA.publicStr);
        System.out.println("    subA." + subA.protectedStr);
        System.out.println("    subA." + subA.defaultStr);
     //   System.out.println("    subA." + subA.privateStr);
        
        SubB subB=new SubB();
        System.out.println("    subB." + subB.publicStr);
        System.out.println("    subB." + subB.protectedStr);
     //   System.out.println("    subB." + subB.defaultStr);
     //   System.out.println("    subB." + subB.privateStr);
     
    }
}

 

 

 

package packageA;

import packageB.SubB;

public class SubA extends Base {

    public void print() {
        System.out.println("packageA.SubA has access to");
        System.out.println("    " + publicStr + " (inherited from Base)");
        System.out.println("    " + protectedStr + " (inherited from Base)");
        System.out.println("    " + defaultStr + " (inherited from Base)");
        // -- not accessible - private elements are even not inherited
        // System.out.println(privateStr);

        Base b = new Base(); // -- other Base instance
        System.out.println("    b." + b.publicStr);
        System.out.println("    b." + b.protectedStr);
        System.out.println("    b." + b.defaultStr);
        // -- not accessible
        // System.out.println(b.privateStr);
        
        
        SubA subA=new SubA();
        System.out.println("    subA." + subA.publicStr);
        System.out.println("    subA." + subA.protectedStr);
        System.out.println("    subA." + subA.defaultStr);

     //   System.out.println("    subA." + subA.privateStr);
        
        SubB subB=new SubB();
        System.out.println("    subB." + subB.publicStr);
        System.out.println("    subB." + subB.protectedStr);
     //   System.out.println("    subB." + subB.defaultStr);
     //   System.out.println("    subB." + subB.privateStr);
        
        
    }
}

 

 

 

package packageA;
import packageB.SubB;

public class AnotherA {
    public void print() {
        System.out.println("packageA.AnotherA has access to");
        Base b = new Base();
        System.out.println("    b." + b.publicStr);
        System.out.println("    b." + b.protectedStr);
        System.out.println("    b." + b.defaultStr);
        // System.out.println(b.privateStr);
        
        
        SubA subA=new SubA();
        System.out.println("    subA." + subA.publicStr);
        System.out.println("    subA." + subA.protectedStr);
        System.out.println("    subA." + subA.defaultStr);
     //   System.out.println("    subA." + subA.privateStr);
        
        SubB subB=new SubB();
        System.out.println("    subB." + subB.publicStr);
        System.out.println("    subB." + subB.protectedStr);
     //   System.out.println("    subB." + subB.defaultStr);
     //   System.out.println("    subB." + subB.privateStr);
        
        
    }
}

 

 

 

package packageB;
import packageA.Base;
import packageA.SubA;

public class SubB extends Base {
    public void print() {
        System.out.println("packageB.SubB has access to");
        System.out.println("    " + publicStr + " (inherited from Base)");
        // -- protectedStr is inherited element -> accessible
        System.out.println("    " + protectedStr + " (inherited from Base)");
        // -- not accessible
        // System.out.println(defaultStr);
        // System.out.println(privateStr);

        Base b = new Base(); // -- other Base instance
        System.out.println("    b." + b.publicStr);
        // -- protected element, which belongs to other object -> not accessible
        // System.out.println(b.protectedStr);

        // -- not accessible
        // System.out.println(b.defaultStr);
        // System.out.println(b.privateStr);
        
        
        SubA subA=new SubA();
        System.out.println("    subA." + subA.publicStr);
     //   System.out.println("    subA." + subA.protectedStr);
     //   System.out.println("    subA." + subA.defaultStr);
     //   System.out.println("    subA." + subA.privateStr);
        
        SubB subB=new SubB();
        System.out.println("    subB." + subB.publicStr);
        System.out.println("    subB." + subB.protectedStr);
     //   System.out.println("    subB." + subB.defaultStr);
     //   System.out.println("    subB." + subB.privateStr);
        
        
    }
}

 

 

package packageB;
import packageA.Base;
import packageA.SubA;

public class AnotherB{
    public void print() {
        System.out.println("packageB.AnotherB has access to");
        Base b = new Base();
        System.out.println("    b." + b.publicStr);
        // -- not accessible
        // System.out.println(b.protectedStr);
        // System.out.println(b.defaultStr);
        // System.out.println(b.privateStr);
        
        
        
        SubA subA=new SubA();
        System.out.println("    subA." + subA.publicStr);
     //   System.out.println("    subA." + subA.protectedStr);
     //   System.out.println("    subA." + subA.defaultStr);
     //   System.out.println("    subA." + subA.privateStr);
        
        SubB subB=new SubB();
        System.out.println("    subB." + subB.publicStr);
     //   System.out.println("    subB." + subB.protectedStr);
     //   System.out.println("    subB." + subB.defaultStr);
     //   System.out.println("    subB." + subB.privateStr);
        
        
    }
}

 

 

总结:

 

1).不考虑继承的情况下:

一个类在 ”某处“实例化并访问域和方法,或者直接访问类域和类方法:

a). 在类定义出:四种类型都可访问。(见Base中的b对象)

b). 与类定义在同一包中:default、protected、public可访问。(见AnotherA中b对象)

c). 与类定义在不同包中:仅可访问public类型。(见AnotherB中b对象)

 

 

2).有继承关系

一个子类在 ”某处“实例化并访问父类继承的域和方法(子类新定义的域和方法参加上面不考虑继承的情况),或者直接访问父类类域和类方法:

a).定义在包内的子类(如上例的SubA)

A).在子类定义处、同包内:default、protected、public可访问。

B).在包外:只可访问public属性

 

 

b).定义在包外的子类(如上例的SubB)

A).在子类定义处、父类同包内:protected及public可访问。

B).在子类包内(非子类定义处):只可访问public属性

 

分享到:
评论

相关推荐

    一个免费的java权限后台管理系统框架

    java权限后台开发框架,采用spring + srpingsecurity + springMVC + Hibernate + freemarker + jquery 等技术实现,页面及源文件打包发布程序。 完整的功能应用,包括:后台权限、人员机构、参数代码、角色权限、...

    浅析java修饰符访问权限(动力节点Java学院整理)

    Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符,下面通过本文给大家简单介绍下java修饰符访问权限相关知识,感兴趣的朋友一起学习吧

    Java中四种访问权限资料整理

    主要介绍了 Java中四种访问权限总结的相关资料,需要的朋友可以参考下

    免费java权限(应用开发)框架,包含源码,全功能

    java权限后台开发框架,采用spring + srpingsecurity + springMVC + Hibernate + freemarker + jquery 等技术实现,页面及源文件打包发布程序。 完整的功能应用,包括:后台权限、人员机构、参数代码、角色权限、...

    有关Java面向对象问题整理汇总

    3.访问权限;4.继承;5.多态 ( 最重要 );6.抽象和接口;7.内存分析等问题,该资源是在老男孩IT教育的基础上的二次整理。面向对象这一章是最重要的一章. java是一门纯面向对象编程语言, 我们后面写的所有程序都是在...

    解决Java提示正在尝试分配更低的访问权限问题

    在本篇文章里小编给大家整理的是关于解决Java提示正在尝试分配更低的访问权限问题的相关方法内容,有需要的朋友们跟着参考学习下。

    flex+java+tomcat实现socket通信及安全策略

    /********** 本例子是本人参考网上的例子,重新整理和修改的例子,非常简单和具有针对性****/ 1.背景:Flex Socket通信及安全策略,使用flex实现客户端,java实现...需要在java服务端开通843权限策略,具体看例子源码

    JAVA面试题最全集

    9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中...

    Java学习笔记-个人整理的

    {2.10}访问控制}{60}{section.2.10} {2.10.1}类的属性}{60}{subsection.2.10.1} {2.10.2}类的方法}{61}{subsection.2.10.2} {2.10.3}静态代码块}{62}{subsection.2.10.3} {2.11}\ttfamily final}{63}{section....

    java100题面试题资料.zip

    每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。下面列出了使用封装的一些好处: 1) 通过隐藏对象的属性来保护对象内部的状态。 2) 提高了代码的可用性和可维护性,因为对象的行为可以被...

    java源码之讯友网络相册的实现.zip

    权限管理:支持用户设置相册的访问权限,包括公开、私密、仅好友可见等,确保用户能够对自己的照片进行隐私保护和控制访问范围。 搜索功能:提供便捷的搜索功能,用户可以通过关键词搜索相册或照片,快速定位自己感...

    基于Java小型论坛.rar

    用到的框架有spring MVC三层架构(解决前后端请求处理),spring mybatis(用来访问数据库),spring security(管理安全权限)。HTTP协议用于传输HTML内容,规定了浏览器和服务器之间如何通信。 3、主要职责:负责...

    Java内部类:你真得了解方法内部类吗?

    文章目录Java内部类:你真得了解方法内部类吗?普通内部类方法内部类匿名内部类静态内部类参考...持有父类引用,故可以访问父类任何访问权限的变量、方法 内部类在父类外部的创建方式 public class Main{ public sta

    sql注入过程详解_动力节点Java学院整理

    SQL注入攻击的总体思路是: 1.发现SQL注入位置; ...总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。如果程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的

    JavaSE_学习笔记整理

    Java基础、数据类型、数组、类和对象基础、对象的创建和使用、类的命名空间和访问权限、面向对象高级特性、系统常用类、异常处理、集合框架

    Sql注入原理简介_动力节点Java学院整理

    一、什么是sql注入呢?  所谓SQL注入,就是通过把SQL命令插入到Web表单递交或... 黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改

    Java课程设计-教务系统管理.doc

    六 实体关联图设计 根据上面的功能整理出数据信息,画出ER图 七 数据逻辑设计 数据库的设计充分体现了规范化、完整性约束。所谓规范化是。。。。,完整性约束包 括。。。。。。和自定义完整性。 数据库的设计充分...

    开源bbs源码java-JavaStudy:Java全系列知识点都总结在这里了,欢迎大家前来学习,如果对你有所帮助,请不要忘记star一下给于

    SpringBoot整合Shiro实现权限控制 SpringBoot整合Shiro实现记住我RememberMe功能 微服务SpringCloud 安全框架(Shiro、SpringSecurity) 消息中间件 ActiveMQ的使用 搜索引擎 非关系型数据库 分布式技术Dubbo、...

    班级网站管理系统java课程设计报告.doc

    实现的功能主要包括: 1、管理员功能 1.1管理员主要要负责管理用户权限和用户账号,可以实现对两者的发布、删除和修 改功能。 1.2负责教师信息的; 1.3班级信息管理,负责班级信息的增删改查; 1.4学生信息管理,...

    word源码java-javaDianshangPlus:javaDianshang增加tomcat集群、redis分布式、单点登录、权限、定

    word源码java mmall_learning MarkDown里面没有图...小伙伴们请看WORD文档呀... 学习必读 课程项目环境 项目代码RUN起来 课程学习快速通道 知识点整理及分享 课程项目环境 centos下载地址 阿里云的下载已经失效,请...

Global site tag (gtag.js) - Google Analytics