多人开发同一个项目时,会出现类名称相同的情况。package就是为了避免类或接口名称重复而采用的一种措施。实际上包就是有一定层次结构的文件夹,*.class文件要保存当前类声明的和包对应的文件夹中。
包的定义格式:package 包名[.子包名];
编译时:javac –d . Hello.java -d选项为源文件生成相应的目录结构。
没有给源文件设包名时,java将这样的文件自动看作是隶属于该目录的默认包中。
父包和子包只是表示存在某种逻辑上的联系,在用法上不存在任何关系,如果父包中的类需要使用子包中的类,必须使用子包的全名,不能省略父包部分。
如果几个类存放在不同的包中,调用构造器时需要使用类的全限定类名(包名+类名)。通过import关键字可以向某个java文件中导入指定包层次下的类,这样就可以省略包前缀。同一个包内的类,不用import,可以直接访问。
import语句中的*号只能代表类,不能代表包。
java默认为所有源文件导入java.lang包下的所有类。如果有同名的类,还是要使用类的全名。
如果一个类中的方法全部是用static声明的静态方法,则在导入的时候就可使用“import static”的方式进行导入,调用的时候不使用“类.方法()”,直接调用静态方法或访问静态属性即可。
package com.servlet; //包名全部用小写
import java.io.FileReader; //导入一个具体的类:import 包名+类名
import static java.lang.Math.*; //导入静态属性
import java.util.*; //java.util.sub.*子包下的类没有导入
封装(Encapsulation)是面向对象的三大特征之一,指的是将对象的状态信息和实现细节隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
类只有public 和default两种访问限定符。
每一个java源代码文件可以有多个类,但类和类平级,不能在类里面套类。只能有一个public类,该类的名称与文件的名称相同。源代码文件中的其他类为public类提供支持,在包之外不可见。
类库开发者在修改类库时,如何保证类库使用者不需要修改代码?
Java用3个关键字在类的内部设定边界:public、private和protected。这些access specifier决定了紧跟其后被定义的东西可以在哪里使用。
访问限定符控制其后的成员(属性或方法)在哪里可以被访问(被’.’),在哪里不可以被访问。若不遵守此规则,则编译时会出错。
虽然类的实例对象会具有类中定义的全部成员,但实例对象并不是在哪都能直接访问自己的成员。取决于实例对象所在的class是否符合访问限定符的要求。
类的成员有4中访问限定符:
default:包访问权限,不使用任何修饰符,在同一包内的任何类都可访问。
private:只能在当前类中(类型创建者和类型的内部方法)可以访问。同一个包的其他类及子类都不能访问。若要访问,可以通过定义public get方法,在方法中获取private属性。在该类之外, public方法可以被.(访问),private属性不能。保留了更改底层实现的权利。
public:公有,对所有类(同包或不同包)都可见。
protected:继承访问权限,对同一包内的类和所有子类(同包或不同包)都可见。
protected access requires a little more elaboration. Suppose class A declares a protected field x and is extended by a class B, which is defined in a different package (this last point is important). Class B inherits the protected field x, and its code can access that field in the current instance of B or in any other instances of B that the code can refer to. This does not mean, however, that the code of class B can start reading the protected fields of arbitrary instances of A! If an object is an instance of A but is not an instance of B, its fields are obviously not inherited by B, and the code of class B cannot read them.
【与基类不在同一个包中,在生成派生类时,派生类可以继承基类的protected成员(subInstanc.x()),这个继承的protected成员在派生类内部是可以访问的(super.x()),但是在派生类内部无法直接访问基类实例对象的protected成员,也无法访问兄弟类(继承自同一个基类)的实例对象继承的protected field(一种派生类内部只能访问该种派生类的对象继承的基类protected成员,不能访问基类的其他派生类对象继承的基类protected成员)。】
java面向对象--包及访问控制符的更多相关文章
-
Java面向对象 包
Java面向对象 包 知识概要: (1)包的概念 (2)包的命名 (3)编译执行 (4)导入 (5)包的访问权限 包: 包(package)用于将完成不同功能 ...
-
JAVA面向对象-----包机制
JAVA面向对象-–包机制 问题: 当定义了多个类的时候,可能会发生类名的重复问题. 在java中采用包机制处理开发者定义的类名冲突问题. 怎么使用java的包机制呢? 1.使用package 关键字 ...
-
java - day008 -final ,static ,访问控制符.
面向对象 封装 类: 模板 对象: 实例 引用,遥控器 构造方法 新建对象时执行 ...
-
Java面向对象入门(2)-访问修饰符
Java访问修饰符–public, protected, private and default Java提供了四个访问修饰符来设置类,变量,方法和构造函数的访问级别,即public,private, ...
-
java基本数据类型,访问控制符,运算符执行顺序
1.java数据类型 内置数据类型:boolean(1), byte(8), char(16), short(8), int(32), long(64), float(32), double(64) ...
-
JAVA面向对象-----成员内部类的访问方式
成员内部类的访问方式 1.内部类可以直接访问外部类的成员属性.(孙悟空相当于内部类飞到牛魔王的肚子里面去). 2.外部类需要访问内部类的成员属性时需要创建内部类的对象. 1.在外部类的成员函数中创建内 ...
-
Java面向对象_包装类访问修饰符
在java中有一个设计的原则"一切皆对象",java中的基本数据类型就完全不符合这种设计思想,因为八种基本数据类型并不是引用数据类型,所以java中为了解决这样的问题,jdk1.5 ...
-
Java 面向对象面试题
1.Java面向对象的三种特性 封装:封装是把数据和操作数据的方法封装起来,对数据的访问只能通过已定义的接口进行访问. Java的四种访问控制符: - 默认的(default):不使用任何修饰符,在同 ...
-
Java面向对象(二)
面向对象(Object Oriented) Java支持面向对象三大特性:封装.继承.多态.(抽象)1.封装(Encapsulation)封装:隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用 ...
随机推荐
-
Windows下80端口被pid为4的System进程占用解决方法
前言 之前是Windows 7系统,前段时间装了Windows 10,php环境还没来得及搭建.今天折腾了一下,是用nginx+php,端口是80(已经停止了iis服务),nginx就是起不来,十之八 ...
-
jquery中append跟prepend的用法
jquery中append和prepend的用法 append 是插入到元素中,并放到元素内的最后面prepend 是插入到元素中,并放到元素内的最前面例$("body"). ...
-
Mvc3.0_笔记
1.保留文本框中的值:<p>Find @Html.TextBox("searchKey", ViewBag.Filter as string)</p> 这 ...
-
mysql免安装版使用
打开命令行,到bin目录下,输入net start mysql 启动服务,输入mysql -u root -p回车后输入密码,进入mysql.
-
JS表单验证类HTML代码实例
以前用的比较多的一个JS表单验证类,对于个人来说已经够用了,有兴趣的可以在此基础上扩展成ajax版本.本表单验证类囊括了密码验证.英文4~10个 字符验证. 中文非空验证.大于10小于100的数字.浮 ...
-
找轮转后的有序数组中第K小的数
我们可以通过二分查找法,在log(n)的时间内找到最小数的在数组中的位置,然后通过偏移来快速定位任意第K个数. 此处假设数组中没有相同的数,原排列顺序是递增排列. 在轮转后的有序数组中查找最小数的算法 ...
-
hihoCoder1498-Diligent Robots
#1498 : Diligent Robots Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB Description The ...
-
VB.NET版机房收费系统---组合查询
查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...
-
KNN Python实现
KNN Python实现 ''' k近邻(kNN)算法的工作机制比较简单,根据某种距离测度找出距离给定待测样本距离最小的k个训练样本,根据k个训练样本进行预测. 分类问题:k个点中出现频率最高的类别作 ...
-
【linux】vim常用操作及vim插件的安装使用
vim是linux下一个非常好用的文本编辑器,在linux下开发的人员要熟练掌握vim常用命令. 1. 打开在第n行 vim +143 filename.txt 2. 只读模式打开 vim -R / ...