Java编程思想阅读笔记(第六章) 访问权限控制

    1)访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。

    2)访问权限空值的等级,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键词)和private。

6.1 包:库单元

    1)包内包含有一组类,它们在单一的名字空间之下被组织在了一起。

    2)当不指定类所属的包时,被称为未命名包或默认包。

    3)每个.Java文件可以有一个public类,该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java)。每个.Java文件只能有一个public类,否则编译器不会接受。

6.1.1 代码组织

    1)如果使用package语句,它必须是文件中除注释之外的第一句程序代码,在文件的起始处写:package access; 就表示你在声明该编译单元是名为access的类库的一部分。

    2)Java包的命名规则全部使用小写字母,包括中间的字也是如此。

6.1.2 创建独一无二的包名

    1)包名称一般选用域名的单词反序,并且全部小写。

    2)包名称中包含的 '.' 应该对应与文件结构的层次。

6.1.3 定制工具库

    1)当我们需要使用一个不同包中的类时,可以使用import语句来导入。

6.1.4 用import改变行为

    1)Java没有C的条件编译功能,该功能可以使你不必更改任何程序代码,就能够切换开关并产生不同的行为。

    2)Java可以通过不同包名的形式来实现条件编译,例如调试过程中,可以通过修改被导入的package的方法来实现这一目的。

6.1.5 对使用包的忠告

    1)务必记住,无论何时创建报,都已经在给定包的名称的时候隐含的制订了目录结构,这个包必须位于其名称所制定的目录之中,而且该目录必须是在以CLASSPATH开始的目录中可以查询到的。

    注:使用开发工具(Eclipse或者其他开发工具)进行创建类的过程中,开发工具已经帮我们实现了创建目录的过程。

6.2 Java访问权限修饰词

    1)public、private和protected这几个Java访问权限修饰词在使用时,是置于类中每个成员的定义之前的——无论它是一个域还是一个方法。

6.2.1 包访问权限

    1)默认访问权限没有任何关键字,但是通常是指包访问权限(有时也表示为friendly)。这就意味着当前包中的所有其他类对那个成员都有访问权限,但对于这个类之外的所有类,这个成员是private的。

    2)提供访问器(accessor)和变异器(mutator)方法(也成为 get/ set 方法),可以读取和改变数值。

6.2.2  public:接口访问权限

    1)使用关键字public,就意味着public之后紧跟着的成员声明自己对每个人都是可用的。

6.2.3 private:你无法访问

    1)关键词private的意思是,除了包含该成员的类之外,其他任何类都无法访问这个成员。

6.2.4 protected:继承访问权限

    1)protected的作用是,有某个特定成员,把对他的访问权限赋予派生类而不是所有类。

    2)protected也提供包访问权限,也就是说,想通报内的其他类可以访问protected元素。

6.3  接口和实现

    1)访问权限的控制常被称为是具体实现的隐藏,把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是封装。

6.4 类的访问权限

    1)每个编译单元(文件)都只能有一个public类。

    注:可以同时拥有多个 public 修饰的非静态内部类(或静态内部类)。

//一个文件中只能含有一个public修饰的外部类
//可以同时拥有多个public修饰的内部静态类
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.woof();
        //创建非静态内部类的对象
        Main main = new Main();
        Main.Cat cat = main.new Cat();
        cat.woof();
    }
    //public 修饰的静态内部类
    public static class Dog{
        public void woof(){
            System.out.println("W W W W W");
        }
    }
    //public 修饰的非静态内部类
    public class Cat{
        public void woof(){
            System.out.println("M M M N");
        }
    }
}

    2)public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写。

    3)虽然不是很常用,但编译单元内完全不带public类也是有可能的,在这种情况下,可以随意的对文件命名(不推荐这样做,因为不利于阅读和维护代码)。

    4)请注意,类既不可以是private的(这样会使得除了该类之外,其他任何类都不可以访问它),也不可一世protected的(内部类可以是这两种情况)。所以对于类的访问权限,仅有两个选择:包访问权限或者public。

    5)如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象,但是有一个例外,就是你在该类的static成员内部可以创建。

    注:单例模式就是用了这样的方式实现的。

6.5 总结

    1)本章讨论了类是如何被构建成类库的:首先,介绍了一组类是如何被打包到一个类库中的,其次,类是如何控制对其成员的访问的。

    2)控制对成员的访问权限有两个原因,第一是为了使用户不要碰触到那些他们不该碰触的部分。第二是为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响。

    3)访问修饰符对应的权限表。

修饰符当前类同 包子 类其他包
public
protected×
××
private×××
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值