设为首页 加入收藏

TOP

浅析Java中的访问权限控制(一)
2017-09-30 17:09:34 】 浏览:3707
Tags:浅析 Java 访问 权限 控制

今天我们来一起了解一下Java语言中的访问权限控制。在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制。考虑两个场景:

场景1:工程师A编写了一个类ClassA,但是工程师A并不希望ClassA被该应用中其他所用的类都访问到,那么该如何处理?

场景2:如果工程师A编写了一个类ClassA,其中有两个方法fun1、fun2,工程师只想让fun1对外可见,也就是说,如果别的工程师来调用ClassA,只可以调用方法fun1,那么该怎么处理?

此时,访问权限控制便可以起到作用了。

在Java中,提供了四种访问权限控制:默认访问权限(包访问权限),public,private以及protected。

注意,上述四种访问权限,只有默认访问权限和public能够用来修饰类。修饰类的变量和方法四种权限都可以。(本处所说的类针对的是外部类,不包括内部类)

下面就分别针对修饰类和修饰类的成员来讲述这四种访问权限控制。

1.修饰类

默认访问权限(包访问权限):用来修饰类的话,表示该类只对同一个包中的其他类可见。

public:用来修饰类的话,表示该类对其他所有的类都可见。

下面通过几个例子来看一下两者的区别:

例1:

Main.java:

package com.cxh.test1;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        People people = new People("Tom");
        System.out.println(people.getName());
    }

}

People.java

package com.cxh.test1;

class People {           //默认访问权限(包访问权限)

    private String name = null;

    public People(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

从代码可以看出,修饰People类采用的是默认访问权限,而由于People类和Main类在同一个包中,因此People类对于Main类是可见的。

程序运行结果:

例子2:

People.java

package com.cxh.test2;

class People {           //默认访问权限(包访问权限)

    private String name = null;

    public People(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

此时People类和Main类不在同一个包中,会发生什么情况呢?

下面是Main类中的提示的错误:

提示Peolple类在Main类中不可视。从这里就可以看出,如果用默认访问权限去修饰一个类,该类只对同一个包中的其他类可见,对于不同包中的类是不可见的。

正如上图的快速修正提示所示,将People类的默认访问权限更改为public的话,People类对于Main类便可见了。

2.修饰类的方法和变量

默认访问权限(包访问权限):如果一个类的方法或变量被包访问权限修饰,也就意味着只能在同一个包中的其他类中显示地调用该类的方法或者变量,在不同包中的类中不能显示地调用该类的方法或变量。

private:如果一个类的方法或者变量被private修饰,那么这个类的方法或者变量只能在该类本身中被访问,在类外以及其他类中都不能显示地进行访问。

protected:如果一个类的方法或者变量被protected修饰,对于同一个包的类,这个类的方法或变量是可以被访问的。对于不同包的类,只有继承于该类的类才可以访问到该类的方法或者变量。

public:被public修饰的方法或者变量,在任何地方都是可见的。

下面再通过几个例子来看一下它们作用域类的方法和变量时的区别:

例3:

Main.java没有变化

People.java

package com.cxh.test1;

public class People {      

    private String name = null;

    public People(String name) {
        this.name = name;
    }

    String getName() {    //默认访问权限(包访问权限)
        return name;
    }

    void setName(String name) {   //默认访问权限(包访问权限)
        this.name = name;
    }
}

此时在Main类是可以显示调用方法getName和setName的。

但是如果People类和Main类不在同一个包中:

package com.cxh.test2;    //与Main类处于不同包中

public class People {      

    private String name = null;

    public People(String name) {
        this.name = name;
    }

    String getName() {    //默认访问权限(包访问权限)
        return name;
    }

    void setName(String name) {   //默认访问权限(包访问权限)
        this.name = name;
    }
}

此时在Main类中会提示错误:

由此可以看出,如果用默认访问权限来修饰类的方法或者变量,则只能在同一个包的其他类中进行访问。

例4:

People.java

package com.cxh.test1;   

public class People {      

    private String name = null;

    public People(String name) {
        this.name = name;
    }

    protected String getName() {   
        return name;
    }

    protected void setName(String name) {  
        this.name = name;
    }
}

此时是可以在Main中显示调用方法getName和setName的。

如果People类和Main类处于不同包中:

package com.cxh.test2;   

public class People {      

    private String name = null;

    public People(String name) {
        this.name = name;
    }

    protecte
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇跟我学Spring3(7.5):对JDBC的.. 下一篇Java命令学习系列(1):Jps

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目