类实例化成对象之后,可以通过对象加上"."操作符访问和操纵该对象的域和方法,但是这种访问是有限制的,通过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属性
相关推荐
* default:default访问权限是缺省的,缺省访问权限介于public和protected之间,拥有缺省访问权限的类、方法和变量可以被同一个包中的类访问。 Final关键字 Final关键字是Java语言中的一个保留字,用于定义不可变...
- **protected**:保护访问权限,允许同一包内的类和不同包的子类访问。 3. **面向对象原则** - **封装**:封装是将对象的属性和行为结合在一起,并通过定义访问控制来隐藏实现细节,确保数据的安全。 - **子类...
java权限后台开发框架,采用spring + srpingsecurity + springMVC + Hibernate + freemarker + jquery 等技术实现,页面及源文件打包发布程序。 完整的功能应用,包括:后台权限、人员机构、参数代码、角色权限、...
Java 修饰符是 Java 语言中的一种基本语法元素,用于控制访问权限、继承关系、抽象类和静态成员变量等方面。Java 修饰符可以分为两大类:访问修饰符和非访问修饰符。访问修饰符包括 public、protected、default 和 ...
如果目录为空,或者访问权限不足,`list()`可能会返回`null`。 Java的IO流是处理输入和输出的核心组件。它们分为字节流和字符流,字节流处理原始的8位字节数据,而字符流处理Unicode字符。字节流又分为输入流...
Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符,下面通过本文给大家简单介绍下java修饰符访问权限相关知识,感兴趣的朋友一起学习吧
3. **访问修饰符**:public、private、protected和默认(包访问权限)的理解和应用。 4. **接口**:Java中的接口允许实现多继承,是定义行为的标准。 三、异常处理 1. **异常类层次**:了解Exception及其子类,如...
Java编程语言复习重点整理 ...重写时返回类型、访问权限和抛出的异常不能更严格。 这些知识点涵盖了Java基础中的核心概念,对于理解和编写Java代码至关重要。复习这些内容有助于提升对Java语言的理解和应用能力。
主要介绍了 Java中四种访问权限总结的相关资料,需要的朋友可以参考下
- 使用`setAccessible(true)`可以绕过Java的访问权限控制,但需谨慎使用,因为这可能破坏封装性。 7. **应用实例** - 框架设计:Spring框架就大量使用反射来实现依赖注入。 - 动态代理:Java的`java.lang....
java权限后台开发框架,采用spring + srpingsecurity + springMVC + Hibernate + freemarker + jquery 等技术实现,页面及源文件打包发布程序。 完整的功能应用,包括:后台权限、人员机构、参数代码、角色权限、...
Java有四种权限修饰符:private(私有)、default(包访问权限)、protected(受保护)和public(公共)。它们决定了类、方法、属性的可见性,影响了代码的封装性和耦合度。 【构造器】 构造器用于初始化新对象,...
子类的方法可以重写父类的方法,但需要遵循重写的规则,如方法名和参数列表相同、返回值类型小于等于父类的方法、声明抛出的异常类小于等于父类方法所抛出的异常类,并且访问权限不得比父类方法的访问权限更严格。...
【标题】"java新闻发布系统Java实用源码整理learns" 提供的是一个基于Java语言开发的新闻发布系统的源代码集合,适合学习和理解Java在实际项目中的应用。 【描述】"java新闻发布系统Java实用源码整理learns" 暗示这...
Java 笔试试题整理主要涵盖了Java编程的基础知识,包括面向对象、基础类库、Servlet、三大框架等核心领域。以下是对这些知识点的详细说明: 1. **super()与 this()的区别**: - `super()`用于子类调用父类的构造...
- **default(无修饰符)**:包级访问权限,仅对同一包内的类可见。 - **private**:私有,仅对当前类可见。 #### 三、String类型 - **String**不是一个基本数据类型,而是一个类。因此,它具有对象的特性,可以...
1. **静态方法与普通成员变量的访问权限**: - 静态方法和静态变量属于类级别,它们在类加载时初始化,无需类实例化即可访问。 - 普通成员变量与方法属于对象级别,它们在类实例化时初始化。因此,普通成员方法...
2. **面向对象**:深入讲解类、对象、封装、继承、多态等概念,以及抽象类、接口、访问权限修饰符等特性。 3. **异常处理**:如何使用try-catch-finally语句处理异常,了解检查性异常和运行时异常的区别。 4. **...
1. **作用域**:`public`, `private`, `protected`以及默认的作用域控制成员的访问权限。`public`可以在任何地方访问,`private`只能在本类中访问,`protected`允许子类和同一包内的类访问,而默认作用域只允许在...