Java中有三种修饰符:public、protected、private。实际上还隐藏着一个缺省的包。
public:定义了类型的主要功能。
protected:定义了子类可获得的用于特化目的的功能。
private:定义仅仅此类的特定功能。
package(缺省):定义了包内其他代码可获得的用来实现包类型之间协作的功能。
例子:
package P1;
public abstract class AbstractBase {
public AbstractBase() {
System.out.println("\nCreate Object : " + getClass());
}
private void pri() {System.out.println("AbstractBase.pri()");}
void pac() {System.out.println("AbstractBase.pac()");}
protected void pro() {System.out.println("AbstractBase.pro()");}
public void pub() {System.out.println("AbstractBase.pub()");}
public final void show() {
pri();
pac();
pro();
pub();
}
}
package P2;
import P1.AbstractBase;
public class Concrete1 extends AbstractBase {
public void pri() {System.out.println("Concrete1.pri()");}
public void pac() {System.out.println("Concrete1.pac()");}
public void pro() {System.out.println("Concrete1.pro()");}
public void pub() {System.out.println("Concrete1.pub()");}
}
package P1;
import P2.Concrete1;
public class Concrete2 extends Concrete1 {
public void pri() {System.out.println("Concrete2.pri()");}
public void pac() {System.out.println("Concrete2.pac()");}
public void pro() {System.out.println("Concrete2.pro()");}
public void pub() {System.out.println("Concrete2.pub()");}
}
package P3;
import P1.Concrete2;
import P2.Concrete1;
public class Concrete3 extends Concrete2 {
public void pri() {System.out.println("Concrete3.pri()");}
public void pac() {System.out.println("Concrete3.pac()");}
public void pro() {System.out.println("Concrete3.pro()");}
public void pub() {System.out.println("Concrete3.pub()");}
public static void main(String[] args) {
new Concrete1().show();
new Concrete2().show();
new Concrete3().show();
}
}
四个类,三个包,AbstractBase和Concrete2在包P1中,Concrete1在P2中,Concrete3在P3中。
运行结果:
写道
Create Object : class P2.Concrete1
AbstractBase.pri()
AbstractBase.pac()
Concrete1.pro()
Concrete1.pub()
Create Object : class P1.Concrete2
AbstractBase.pri()
Concrete2.pac()
Concrete2.pro()
Concrete2.pub()
Create Object : class P3.Concrete3
AbstractBase.pri()
Concrete3.pac()
Concrete3.pro()
Concrete3.pub()
结果分析:
1,所有子类都不能看到private,那么private方法始终没有被覆盖。
2,protected和public都能够被子类覆盖。
3,默认的package的是最有意思的,Concrete1和AbstractBase不在同一包不能覆盖正常,Concrete2和AbstractBase在同一包能够覆盖也正常,Concrete3 和AbstractBase不在同一个包,居然因为Concrete2已经覆盖了pac的方法,把这个打开成了public的了,没有想到。
分享到:
相关推荐
总结来说,`PackageAccessTest`展示了Java中包访问权限在继承关系中的应用。这种权限控制使得开发者能够在保持代码封装性的同时,允许子类进行必要的继承和扩展。理解和熟练运用这些访问修饰符对于编写健壮、易于...
在Java开发中,JAR包扮演着重要角色,它们可以是独立的应用程序(通过主类执行),也可以作为库被其他项目引用。这些JAR文件包含了编译后的字节码,可以被Java虚拟机(JVM)加载和执行。 在"压缩包子文件的文件名称...
Java的JAR(Java Archive)包是Java编程语言中用于集合类和其他资源文件的压缩格式。它主要用于分发和运行Java应用程序和库。JAR文件包含编译后的.class文件,元数据(如MANIFEST.MF文件),以及其他资源文件,如...
接下来,我们讨论Java包。包在Java中扮演着组织和命名空间的角色。它帮助管理类的命名冲突,并允许开发者将相关的类和接口组织在一起。包通过`package`关键字声明,比如`package com.example.myapp`。常见的包有`...
在Java编程环境中,访问HTTPS接口通常涉及到网络通信和安全性的处理。HTTPS协议是HTTP协议的安全版本,通过SSL/TLS协议提供了数据加密、服务器身份验证和消息完整性检查,以确保网络通信的安全。本教程将深入讲解...
JSON包在Java中扮演着至关重要的角色,因为它允许开发者在Java对象与JSON字符串之间进行无缝转换,这对于网络通信、数据存储以及API交互等方面非常有用。 1. **JSON对象与Java对象的转换** - `JSONObject` 类是...
(java 中实现对 access 数据库的远程访问) java 中实现对 access 数据库的远程访问是指在 java 中通过远程访问 access 数据库,以满足项目中的需求。在实际项目中,可能会遇到这样的问题:A 服务器上的应用程序需要...
在Java中实现Oracle数据库连接,我们需要用到特定的JAR包,这些JAR包通常包含在Oracle的数据库客户端或者Oracle JDBC驱动程序中。 首先,Oracle JDBC驱动分为两种类型: Thin驱动和 Thick驱动。Thin驱动是一种纯...
javax.naming.spi 提供一些方法来动态地插入对通过 javax.naming 和相关包访问命名和目录服务的支持。 javax.net 提供用于网络应用程序的类。 javax.net.ssl 提供用于安全套接字包的类。 javax.print 为 JavaTM ...
在这个项目中,我们看到一个基于Java开发的图形用户界面(GUI)抓包工具。下面我们将深入探讨相关知识点: 1. **Java**: Java是一种跨平台的面向对象的编程语言,被广泛应用于服务器端开发、桌面应用、移动应用等。...
4. **默认(无修饰符)**:这种访问控制级别也称为包访问或内部访问,意味着只有同一包内的类可以访问这些成员。在没有指定任何访问修饰符的情况下,类、接口、方法和字段将具有这种默认的访问权限。 通过合理使用...
利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为使用java打包之后,生成的jar包中图片找不着的。这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成...
在Java编程中,包(Package)是组织和管理类的一种机制,它有助于避免命名冲突,同时提供了一种访问控制的方式。文件操作则是指在磁盘上读取、写入或移动文件,这是程序与外部存储交互的基础。在这个场景中,我们...
alg(算法包): 提供AES算法、DES(3DES)算法、HD算法、HMAC算法、IDEA算法、MD算法、SHA算法。 cache(缓存包): 提供Ehcache缓存操作与管理的相关功能。 codec(编码包): 提供Base64编码、二进制编码...
一、Java包的创建与结构 1. 命名规范:Java包的命名通常遵循反向域名的规则,例如`com.example.myapp`,这里的`com`、`example`和`myapp`分别代表顶级域名、公司或组织名以及项目名。 2. 包的目录结构:在文件系统...
在Java项目中,这可以通过IDE的依赖管理功能(如Maven或Gradle)或者手动将jar包放入`lib`目录并配置`classpath`来实现。 在压缩包子文件的文件名称列表中,"jxl"可能指的是JExcelApi,这是另一个用于处理Excel的...
Java并发包(java.concurrent)是Java平台中处理多线程编程的核心工具包,它提供了丰富的类和接口,使得开发者能够高效、安全地编写多线程程序。这个包的设计目标是提高并发性能,减少同步代码的复杂性,并提供高级...
以上就是使用Java访问Hive数据库所需的基本知识,包括所需的jar包及其作用,以及如何在Java项目中集成和使用这些库来执行Hive查询。在实际操作中,你可能还需要根据具体的环境和需求调整配置,例如设置Hive的配置...
Java集成Kettle所有Jar包是一项常见的任务,尤其对于那些在数据处理、ETL(提取、转换、加载)项目中使用Kettle(也称为Pentaho Data Integration或PDI)的开发者来说。Kettle是一个强大的开源数据集成工具,它提供...