设为首页 加入收藏

TOP

Java的封装性与访问控制详述(一)
2018-05-21 15:49:41 】 浏览:216
Tags:Java 封装 访问 控制 详述

Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有、默认、保护和公有,具体规则如下表:



1.私有级别


私有级别的关键字是private,私有级别的成员变量和方法只能在其所在类的内部自由使用,在其他的类中则不允许直接访问。私有级别限制性最高。示例代码如下:


// PrivateClass.java文件
public class PrivateClass {           
    private int x;                   


    public PrivateClass() {           
        x = 100;
    }
    private void printX() {           
        System.out.println("Value Of x is" + x);
    }
}



// HelloWorld.java文件调用PrivateClass
public class HelloWorld {
    public static void main(String[] args) {


        PrivateClass p;
        p = new PrivateClass();


        //编译错误,PrivateClass中的方法 printX()不可见
        p.printX();                   
    }
}


上述代码第2行声明PrivateClass类,其中的代码第3行是声明私有实例变量x,代码第5行是声明公有的构造方法。代码第8行声明私有实例方法。HelloWorld类中代码第22行会有编译错误,因为PrivateClass中printX()的方法是私有方法。


2.默认级别


默认级别没有关键字,也就是没有访问修饰符,默认级别的成员变量和方法,可以在其所在类内部和同一个包的其他类中被直接访问,但在不同包的类中则不允许直接访问。示例代码如下:


// DefaultClass.java文件
package com.Kevin;


public class DefaultClass {


    int x;                           


    public DefaultClass() {
        x = 100;
    }


    void printX() {                 
        System.out.println("Value Of x is" + x);
    }


}


上述代码第6行的x变量前没有访问限制修饰符,代码第12行的方法也是没有访问限制修饰符。它们的访问级别都有默认访问级别。


在相同包(com.Kevin)中调用DefaultClass类代码如下:


// com.Kevin包中HelloWorld.java文件
package com.Kevin;


public class HelloWorld {


    public static void main(String[] args) {


        DefaultClass p;
        p = new DefaultClass();
        p.printX();
    }
}


默认访问级别可以在同一包中访问,上述代码可以编译通过。


在不同的包中调用DefaultClass类代码如下:


// 默认包中HelloWorld.java文件
import com.Kevin.DefaultClass;


public class HelloWorld {


    public static void main(String[] args) {


        DefaultClass p;
        p = new DefaultClass();
        // 编译错误,DefaultClass中的方法 printX()不可见
        p.printX();
    }
}


该HelloWorld.java文件与DefaultClass类不在同一个包中,printX()是默认访问级别,所以p.printX()方法无法编译通过。


3.共有级别


公有级别的关键字是public,公有级别的成员变量和方法可以在任何场合被直接访问,是最宽松的一种访问控制等级。示例代码如下:


// PublicClass.java文件
package com.Kevin;


public class PublicClass {


    public int x;               


    public PublicClass() {
        x = 100;
    }


    public void printX() {       
        System.out.println("Value Of x is" + x);
    }


}


上述代码第6行的x变量是公有级别,代码第12行的方法也是公有级别。调用PublicClass类代码如下:


// 默认包中HelloWorld.java文件
import com.Kevin.PublicClass;


public class HelloWorld {


    public static void main(String[] args) {


        PublicClass p;
        p = new PublicClass();
  &nbs

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇约瑟夫问题 C语言链表实现 下一篇String、StringBuffer、StringBui..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目