`
249326109
  • 浏览: 56479 次
  • 性别: 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基础知识整理

    * default:default访问权限是缺省的,缺省访问权限介于public和protected之间,拥有缺省访问权限的类、方法和变量可以被同一个包中的类访问。 Final关键字 Final关键字是Java语言中的一个保留字,用于定义不可变...

    java基础重点整理

    - **protected**:保护访问权限,允许同一包内的类和不同包的子类访问。 3. **面向对象原则** - **封装**:封装是将对象的属性和行为结合在一起,并通过定义访问控制来隐藏实现细节,确保数据的安全。 - **子类...

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

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

    Java修饰符使用整理(含实例)

    Java 修饰符是 Java 语言中的一种基本语法元素,用于控制访问权限、继承关系、抽象类和静态成员变量等方面。Java 修饰符可以分为两大类:访问修饰符和非访问修饰符。访问修饰符包括 public、protected、default 和 ...

    java中的IO整理完整版

    如果目录为空,或者访问权限不足,`list()`可能会返回`null`。 Java的IO流是处理输入和输出的核心组件。它们分为字节流和字符流,字节流处理原始的8位字节数据,而字符流处理Unicode字符。字节流又分为输入流...

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

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

    JAVA核心知识整理

    3. **访问修饰符**:public、private、protected和默认(包访问权限)的理解和应用。 4. **接口**:Java中的接口允许实现多继承,是定义行为的标准。 三、异常处理 1. **异常类层次**:了解Exception及其子类,如...

    java复习重点整理

    Java编程语言复习重点整理 ...重写时返回类型、访问权限和抛出的异常不能更严格。 这些知识点涵盖了Java基础中的核心概念,对于理解和编写Java代码至关重要。复习这些内容有助于提升对Java语言的理解和应用能力。

    JAVA面试题整理.pdf

    ### JAVA面试题整理知识点 #### 一、Java基础知识 1. **Java基本数据类型** - Java的基本数据类型包括:byte、short、int、long、float、double、char、boolean。 - `String` 不是基本数据类型,它是引用类型。...

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

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

    JAVA 私塾笔记整理——反射机制(Reflection)

    - 使用`setAccessible(true)`可以绕过Java的访问权限控制,但需谨慎使用,因为这可能破坏封装性。 7. **应用实例** - 框架设计:Spring框架就大量使用反射来实现依赖注入。 - 动态代理:Java的`java.lang....

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

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

    尚硅谷JAVA基础笔记吐血整理

    Java有四种权限修饰符:private(私有)、default(包访问权限)、protected(受保护)和public(公共)。它们决定了类、方法、属性的可见性,影响了代码的封装性和耦合度。 【构造器】 构造器用于初始化新对象,...

    java笔记整理.pdf

    子类的方法可以重写父类的方法,但需要遵循重写的规则,如方法名和参数列表相同、返回值类型小于等于父类的方法、声明抛出的异常类小于等于父类方法所抛出的异常类,并且访问权限不得比父类方法的访问权限更严格。...

    java新闻发布系统Java实用源码整理learns

    【标题】"java新闻发布系统Java实用源码整理learns" 提供的是一个基于Java语言开发的新闻发布系统的源代码集合,适合学习和理解Java在实际项目中的应用。 【描述】"java新闻发布系统Java实用源码整理learns" 暗示这...

    Java笔试试题整理

    Java 笔试试题整理主要涵盖了Java编程的基础知识,包括面向对象、基础类库、Servlet、三大框架等核心领域。以下是对这些知识点的详细说明: 1. **super()与 this()的区别**: - `super()`用于子类调用父类的构造...

    Java基础面试题整理(附答案)

    - **default(无修饰符)**:包级访问权限,仅对同一包内的类可见。 - **private**:私有,仅对当前类可见。 #### 三、String类型 - **String**不是一个基本数据类型,而是一个类。因此,它具有对象的特性,可以...

    java面试问题整理

    1. **静态方法与普通成员变量的访问权限**: - 静态方法和静态变量属于类级别,它们在类加载时初始化,无需类实例化即可访问。 - 普通成员变量与方法属于对象级别,它们在类实例化时初始化。因此,普通成员方法...

    java面试题整理合集

    2. **面向对象**:深入讲解类、对象、封装、继承、多态等概念,以及抽象类、接口、访问权限修饰符等特性。 3. **异常处理**:如何使用try-catch-finally语句处理异常,了解检查性异常和运行时异常的区别。 4. **...

    JAVA面试题目整理

    1. **作用域**:`public`, `private`, `protected`以及默认的作用域控制成员的访问权限。`public`可以在任何地方访问,`private`只能在本类中访问,`protected`允许子类和同一包内的类访问,而默认作用域只允许在...

Global site tag (gtag.js) - Google Analytics