什么是Java类的访问权限?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是Java类的访问权限?相关的知识,希望对你有一定的参考价值。
声明Java类时,必须要声明访问权限,访问权限是Java语言的权限关键字,可以是public、private、protected,它们到底起什么作用呢?能给出详细解释吗?
在解释访问权限控制之前,先看一个场景。在学生信息管理系统中,有两个类,分别是学生类和课程类,课程类提供了课程表和课程安排两个方法,学生类可以调用课程类提供的课程表查看课程安排,但不能调用课程安排方法,该如何处理,此时就可以利用访问权限来进行控制。
在Java中,提供了四种访问权限控制:默认访问权限(包访问权限),public,private以及protected。
默认访问权限(default):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
private: 对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护的”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。下表列出了四种访问权限的控制粒度:
例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类是可见的。
在有多个类的情况下,private(私有)修饰的类、方法、属性、除了本类中,其他是访问不到的,你可以试一下,编译器肯定报错,protected(保护)修饰的类、方法、属性,在同一个包(java包的概念你应该清楚吧)或者其子类中是可以访问的,其他不可访问,访问报错。public(公开),相当于没有秘密,不论在哪里,随便用。
-- -- 来找亿千年信息科技有限公司的回答。
java类的访问权限
1.解析
Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符。
- private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
- default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
- protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
同一个类 |
同一个包 |
不同包的子类 |
不同包的非子类 |
|
Private |
√ |
|||
Default |
√ |
√ |
||
Protected |
√ |
√ |
√ |
|
Public |
√ |
√ |
√ |
√ |
2.Protected
假设在包accesscontrol下面有AccessControlDemo和 Base 两个类,其中protected double price;是Base类的成员变量,因为两个类在同一个包中,所以在AccessControlDemo类中可以直接访问System.out.println(base.price);具体实例如下:
accesscontrol.AccessControlDemo
accesscontrol.Base
但是假如我们将AccessControlDemo这个类移到test这个包中,我们会发现eclipse中提示错误,编译无法通过,因为在test包中对protected类型的成员变量不可见。
假如我们在test包中创建一个Base类的子类Bulk,也就是说Bulk是Base类不同包的子类。那么在Bulk类中能够直接访问protected double price;这个基层自Base类的成员变量,实例如下:
test.AccessControlDem
以上是关于什么是Java类的访问权限?的主要内容,如果未能解决你的问题,请参考以下文章