多人开发同一个项目时,会出现类名称相同的情况。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. This Handler class should be static or leaks might occur(null) 解决办法 (转)

    原文链接:http://blog.csdn.net/wuleihenbang/article/details/17126371 首先解释下这句话This Handler class should be ...

  2. JDBC基础学习(二)—PreparedStatement

    一.PreparedStatement介绍     在SQL中包含特殊字符或SQL的关键字(如: ' or 1 or ')时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用P ...

  3. 从零开始用 Flask 搭建一个网站(三)

    从零开始用 Flask 搭建一个网站(二) 介绍了有关于数据库的运用,接下来我们在完善一下数据在前端以及前端到后端之间的交互.本节涉及到前端,因此也会讲解一下 jinja2 模板.jQuery.aja ...

  4. Webdriver API之元素定位

    Webdriver提供了8种元素定位方法:id.name.class name.tag name.link text.partial link text.xpath.css selector 一.以上 ...

  5. APP自识别安卓苹果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. js原型二

    function Box(name,age){ this.name = name; this.age = age; this.family = ['哥哥',‘姐姐’,‘妹妹’]: } Box.prot ...

  7. Java排序算法之归并排序

    基本思想: 归并排序利用分治法,先将一个序列分成一个个子序列,然后对子序列进行排序,再把有序子序列合并为整体有序序列. 图片来自于http://www.cnblogs.com/shudonghe/p/ ...

  8. JavaScript中的数据结构及实战系列(2):栈

    开题: 不冒任何险,什么都不做,什么也不会有,什么也不是. 本文目录 栈介绍: JavaScript实现栈: 栈的应用: 栈介绍: 和队列一样,栈也是一种表结构,但是和队列的"先进先出&qu ...

  9. js表白心形特效

    好久没有仔细钻研技术了,闲下来借鉴一下做出一些效果 友情链接: http://tiepeng.applinzi.com/love_you/ ;;background:#ffe;font-size:12 ...

  10. easyUI中datagrid的使用

    easyUI中的datagrid数据表格经常被用到,结合项目中的使用情况,总结一下datagrid使用中需要注意的一些问题.使用datagrid展示数据,需要在html.css.js中都要编写代码,h ...