多人开发同一个项目时,会出现类名称相同的情况。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. 【原创】Octovis在Ubuntu16.04下运行出现core dump的解决方案

    本人SLAM研究新手,使用系统为Ubuntu16.04.本文原址:http://www.cnblogs.com/hitlrk/p/6667253.html 在学习SLAM的过程中,使用Octomap进 ...

  2. npm命令点滴记录

    关于-save-dve后缀命令: 当你为你的模块安装一个依赖模块时,正常情况下你得先安装他们(在模块根目录下npm install module-name),然后连同版本号手动将他们添加到模块配置文件 ...

  3. poj 2369 Permutations (置换入门)

    题意:给你一堆无序的数列p,求k,使得p^k=p 思路:利用置换的性质,先找出所有的循环,然后循环中元素的个数的lcm就是答案 代码: #include <cstdio> #include ...

  4. Android 开发之开发插件使用:Eclipse 插件 SQLiteManger eclipse中查看数据内容--翻译

    最近研究了一段时间Android开发后发现,google自带的ADT工具,缺失一些开发常用的东西,希望可以构建一个类似使用JAVA EE开发体系一样开发的工具包集合,包括前台开发,调试,到后台数据库的 ...

  5. python executemany的使用

    使用executemany对数据进行批量插入的话,要注意一下事项: #coding:utf8 conn = MySQLdb.connect(host = "localhost", ...

  6. activiti 5.15.1 动态手动通过java编码方式,实现创建用户任务,动态指定个人,用户组,角色,指定监听的实现

    因为我们的业务需要,最近一直在搞动态动过java程序实现为用户任务绑定监听程序.碰了很多壁,查看了API文档,最后终于在找到解决办法,所以贴出来,希望能够留个底,也能帮助有需要的人. -------- ...

  7. oracle导入时提示IMP-00010:不是有效的导出文件,头部验证失败

    oracle导入时提示IMP-00010:不是有效的导出文件,头部验证失败: 原因分析:导出的oracle的版本与导入的oracle数据库的版本不一致: 可直接将dmp文件用notepad++打开修改 ...

  8. select 训练

    --1.查询"c001"课程比"c002"课程成绩高的所有学生的学号:SELECT b.sno FROM (SELECT * FROM sc WHERE cno ...

  9. KMP算法学习(详解)

    kmp算法又称“看毛片”算法,是一个效率非常高的字符串匹配算法.不过由于其难以理解,所以在很长的一段时间内一直没有搞懂.虽然网上有很多资料,但是鲜见好的博客能简单明了地将其讲清楚.在此,综合网上比较好 ...

  10. Android中调用文件管理器并返回选中文件的路径

    实际项目中经常需要调用文件管理器,选择下载路径或者上传的本地文件路径.今天就给大家做个demo示范该功能的实现过程. 一.实现效果预览 以下为三星S6的样机测试效果,当然不同手机调用后的效果不一样. ...