多人开发同一个项目时,会出现类名称相同的情况。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面向对象--包及访问控制符的更多相关文章

  1. Java面向对象 包

       Java面向对象  包 知识概要:              (1)包的概念 (2)包的命名 (3)编译执行 (4)导入 (5)包的访问权限 包:   包(package)用于将完成不同功能 ...

  2. JAVA面向对象-----包机制

    JAVA面向对象-–包机制 问题: 当定义了多个类的时候,可能会发生类名的重复问题. 在java中采用包机制处理开发者定义的类名冲突问题. 怎么使用java的包机制呢? 1.使用package 关键字 ...

  3. java - day008 -final ,static ,访问控制符.

    面向对象   封装         类: 模板         对象: 实例         引用,遥控器         构造方法                新建对象时执行           ...

  4. Java面向对象入门(2)-访问修饰符

    Java访问修饰符–public, protected, private and default Java提供了四个访问修饰符来设置类,变量,方法和构造函数的访问级别,即public,private, ...

  5. java基本数据类型,访问控制符,运算符执行顺序

    1.java数据类型 内置数据类型:boolean(1),  byte(8), char(16), short(8), int(32), long(64), float(32), double(64) ...

  6. JAVA面向对象-----成员内部类的访问方式

    成员内部类的访问方式 1.内部类可以直接访问外部类的成员属性.(孙悟空相当于内部类飞到牛魔王的肚子里面去). 2.外部类需要访问内部类的成员属性时需要创建内部类的对象. 1.在外部类的成员函数中创建内 ...

  7. Java面向对象_包装类访问修饰符

    在java中有一个设计的原则"一切皆对象",java中的基本数据类型就完全不符合这种设计思想,因为八种基本数据类型并不是引用数据类型,所以java中为了解决这样的问题,jdk1.5 ...

  8. Java 面向对象面试题

    1.Java面向对象的三种特性 封装:封装是把数据和操作数据的方法封装起来,对数据的访问只能通过已定义的接口进行访问. Java的四种访问控制符: - 默认的(default):不使用任何修饰符,在同 ...

  9. Java面向对象(二)

    面向对象(Object Oriented) Java支持面向对象三大特性:封装.继承.多态.(抽象)1.封装(Encapsulation)封装:隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用 ...

随机推荐

  1. BootstrapBootbox居中

    /* 模态框居中样式 */ .bootbox-container { position: fixed; ; ; ; ; ; overflow-y: auto; } .bootbox-container ...

  2. JAVA加密算法系列-BASE64

    package ***; import java.io.IOException; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encode ...

  3. 【 Android】自定义的AlertDialog中的EditText无法调用输入法问题解决

    1.问题描述: 在自定义的AlertDialog 中添加了EditText组件,但运行时怎么点EditText都无法调出软键盘: 2.原因分析: 一开始我以为EditText的focus属性没有设置好 ...

  4. linux 常用命令之一

    ---恢复内容开始--- Applications->Accessories->Terminal(终端) 终端运行起来会启动一个Shell为我们服务 1.提示符是"#" ...

  5. 数字图像处理(MATLAB版)学习笔记(1)——第1章 绪言

    0.下定决心 当当入手数字图像处理一本,从此开此正式跨入数字图像处理大门.以前虽然多多少少接触过这些东西,也做过一些相关的事情,但感觉都不够系统,也不够专业,从今天开始,一步一步地学习下去,相信会有成 ...

  6. html/css/javascript的含义、作用及理解

    HTML(HyperText Markup Language/超文本标记语言) 含义:HTML是一种用于创建网页的标准标记语言. 作用:页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 理解:主 ...

  7. Android常用adb命令

    1.进入手机命令行模式 adb shell 有多部手机的话 adb -s + 手机编号 + shell 2.安装apk adb install 然后将apk文件拖进命令行 卸载apk adb unin ...

  8. firefox上安装selenium ide失败

    Selenium 初学者第一步: 最近在学习selenium,但是在安装的时候遇到了问题.我是直接在firefox安装的Selenium IDE ,虽然下载安装之后存在于扩展中,但是工具栏里并没有显示 ...

  9. JavaScript--------------------jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

    bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){alert( ...

  10. Python标准模块--importlib

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python提供了importlib包作为标准库的一 ...