多人开发同一个项目时,会出现类名称相同的情况。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. Java中一个方法只被一个线程调用一次

    1.想在运行时抛出异常,终止方法的运行 private final Set<Long> THREADS = new HashSet<>(); public void someM ...

  2. 六行python代码的爱心曲线

    前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题 ...

  3. 常见的Java面试题整理

    面试是我们每个人都要经历的事情,大部分人且不止一次,这里给大家总结常见的面试题,让大家在找工作时候能够事半功倍. 1 Switch能否用string做参数? a.在 Java 7 之前, switch ...

  4. windows下nginx的安装及使用方法入门

    nginx功能之一可以启动一个本地服务器,通过配置server_name和root目录等来访问目标文件 一. 下载 http://nginx.org/   下载后解压   二. 修改配置文件 ngin ...

  5. windows下用cordova构建android app

    最近用到cordova打包apk,总结了下,写下来给大家分享. 一.前期准备工作: 1.安装node   6.2.0 *64 下载地址:链接:http://pan.baidu.com/s/1eS7Ts ...

  6. jQuery的发展史

    jQuery的发展史,你知道吗? 每天多学一点知识,就少写一行代码2006年1月,jQuery的第一个版本面世,至今已经有6年多了(注:这个时间点是截止至出书时间).虽然过了这么久,但它依然以其简洁. ...

  7. this web application instance has been stopped already.

    this web application instance has been stopped already. Could not load oracle/sql/converter_xcharset ...

  8. js中的事件委托详解

    概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的各位 ...

  9. cin 字符串输入

    cin 字符串输入 在学习c的时候,关于字符串的输入,记得有 scanf("%s",s); gets(s); 还有...o.o 好想没了... scanf("%s&quo ...

  10. Mycil命令行MySQL语法高亮和自动补全工具

    MyCli 是MySQL,MariaDB和Percona的命令行界面,具有自动完成和语法高亮的功能. 其效果如图: 那么我们应该怎么安装它呢,这里附上windows的安装方法. 在命令行下输入 pip ...