Java基础教程(9)-Java中的面向对象和类(三)

简介: 【4月更文挑战第9天】内部类和嵌套类允许在另一个类内部定义,提供访问限制和紧密耦合。嵌套类分为static和非static(内部类),内部类能直接访问外部类的所有成员,而static嵌套类只能通过外部类对象访问。抽象类用于定义共享接口,含有抽象方法且不能实例化。接口是定义行为规范的纯抽象,可被类实现或继承。包是组织类的命名空间,import语句用于引入所需类或包。jar文件是打包的类文件集合,包含MANIFEST.MF以运行主类。

内部类和嵌套类:

在另一个类中定义的类就是嵌套类(nested classes)。嵌套类的范围由装入它的类的范围限制。这样,如果类B被定义在类A之内,那么B为A所知,然而不被A的外面所知。嵌套类可以访问嵌套它的类的成员,包括private成员。但是,包围类不能访问嵌套类的成员。

嵌套类一般有2种类型:前面加static标识符的和不加static标识符的。

一个static的嵌套类有static修饰符。因为它是static,所以只能通过对象来访问它包围类的成员。也就是说,它不能直接引用它包围类的成员。因为有这个限制,所以static嵌套类很少使用。

嵌套类最重要的类型是内部类(inner class)。内部类是非static的嵌套类。它可以访问它的外部类的所有变量和方法,它可以直接引用它们,就像外部类中的其他非static成员的功能一样。这样,一个内部类完全在它的包围类的范围之内

抽象类

有时希望创建一个只定义一个被它的所有子类共享的通用形式,由每个子类自己去填写细节。这样的类决定了子类所必须实现的方法的本性。
父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法;

声明一个抽象方法的通用形式:

abstract type name(parameter-list);

任何含有一个或多个抽象方法的类都必须声明成抽象类。声明一个抽象类,只需在类声明开始时在关键字class前使用关键字abstract。抽象类没有对象。
一个抽象类不能通过new操作符直接实例化。这样的对象是无用的,因为抽象类是不完全定义的。而且,不能定义抽象构造函数或抽象静态方法。所有抽象类的子类都必须执行超类中的所有抽象方法或者是它自己也声明成abstract;

接口

在抽象类中,抽象方法本质上是定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现;如果一个抽象类没有字段,所有方法全部都是抽象方法,就可以把该抽象类改写为接口;

接口声明

接口的通用形式:

access interface name { 
 return-type method-name1(parameter-list); 
 return-type method-name2(parameter-list); 
 type final-varname1 = value; 
 type final-varname2 = value; 
 // ... 
 return-type method-nameN(parameter-list); 
 type final-varnameN = value; 
}

access要么是public,要么就没有用修饰符。当没有访问修饰符时,则是默认访问范围;

接口声明中可以声明变量。它们一般是final 和static型的,意思是它们的值不能通过实现类而改变。它们还必须以常量值初始化。如果接口本身定义成public ,所有方法和变量都是public的。

接口实现

一旦接口被定义,一个或多个类可以实现该接口。为实现一个接口,在类定义中包括implements 子句,然后创建接口定义的方法。
一个包括implements 子句的类的一般形式如下:

access class classname [extends superclass] 
 [implements interface [,interface...]] {
    
 // class-body 
}

这里,access要么是public的,要么是没有修饰符的。如果一个类实现多个接口,这些接口被逗号分隔。如果一个类实现两个声明了同样方法的接口,实现接口的方法必须声明成public。而且,实现方法的类型必须严格与接口定义中指定的类型相匹配。

如果一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须定义成abstract类型-(局部实现)

接口继承

接口可以通过运用关键字extends被其他接口继承。语法与继承类是一样的。当一个类实现一个继承了另一个接口的接口时,它必须实现接口继承链表中定义的所有方法。

包package

Java提供了把类名空间划分为更多易管理的块的机制。这种机制就是包。包既是命名机制也是可见度控制机制。你可以在包内定义类,而且在包外的代码不能访问该类。

定义包

创建一个包是很简单的:只要包含一个package命令作为一个Java源文件的第一句就可以了。该文件中定义的任何类将属于指定的包。

package语句定义了一个存储类的名字空间。如果你省略package 语句,类名被输入一个默认的没有名称的包

package 声明的通用形式:pkg 是包名

package pkg;

一个多级包的声明的通用形式如下:每个包名与它的上层包名用点号“.”分隔开

package pkg1[.pkg2[.pkg3]];

在Java虚拟机执行的时候,JVM只看完整类名,因此,只要包名不同,类就不同

包作用域

类是Java的最小的抽象单元。因为类和包的相互影响,
Java将类成员的可见度分为四个种类:

  • 相同包中的子类
  • 相同包中的非子类
  • 不同包中的子类
  • 既不在相同包又不在相同子类中的类

要特别注意:包没有父子关系。java.util和java.util.zip是不同的包,两者没有任何继承关系。

三个访问控制符,private、public和protected,
| |Private成员 | 默认的成员 | Protected成员 | Public成员|
|--|--|--|--|--|
| 同一类中可见 |是 |是|是|是|
|同一个包中对子类可见 |否 |是|是|是|
|同一个包中对非子类可见 |否 |是|是|是|
| 不同包中对子类可见 |否|否|是|是|
|不同的包中对非子类可见|否 |否|否|是|

引入包:

Java包含了import语句来引入特定的类甚至是整个包。一旦被引入,类可以被直呼其名的引用。在程序中将要引用若干个类,那么用import 语句将会节省很多时间。

在Java源程序文件中,import语句紧接着package语句,它存
在于任何类定义之前
import声明的通用形式:

import pkg1[.pkg2].(classname|*);

pkg1是顶层包名,pkg2是在外部包中的用逗点(.)隔离的下级包名。

打包成为jar

可以把 package 组织的目录层级,以及各个目录下的所有文件(包括 .class 文件和其他文件)都打成一个jar文件;

jar包实际上就是一个zip格式的压缩文件,而jar包相当于目录。

jar包还可以包含一个特殊的 /META-INF/MANIFEST.MF 文件, MANIFEST.MF 是纯文本,可以指定 Main-Class 和其它信息。JVM会自动读取这个 MANIFEST.MF 文件,如果存在 Main-Class ,可以直接运行jar

java -jar *.jar

相关文章
|
1天前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
|
1天前
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
7 1
|
1天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(<https://www.sojump.com/m/2792226.aspx/>)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
7 0
|
1天前
|
Java 测试技术 项目管理
Java基础教程(22)-构建工具Maven的基本使用
【4月更文挑战第22天】Maven是Java项目管理及构建工具,简化构建、测试、打包和部署等任务。遵循约定优于配置原则,核心是`pom.xml`配置文件,用于管理依赖和项目信息。安装涉及下载、解压、配置环境变量。在IDEA中使用Maven创建项目,通过`pom.xml`添加依赖和管理版本。常用命令包括`clean`、`compile`、`test`、`package`、`install`和`deploy`。IDEA支持直接执行这些命令。
|
1天前
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
|
1天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
9 0
|
1天前
|
Java
Java对象和类研究
Java对象和类研究
6 0
|
1天前
|
XML Java 测试技术
Java异常处理神器:Guava Throwables类概念与实战
【4月更文挑战第29天】在Java开发中,异常处理是保证程序稳定性和可靠性的关键。Google的Guava库提供了一个强大的工具类Throwables,用于简化和增强异常处理。本篇博客将探讨Throwables类的核心功能及其在实战中的应用。
9 2
|
Java 数据库 容器
|
4天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式