举例详解Java中的访问权限修饰符

 更新时间:2015年08月20日 11:06:19   作者:damotiansheng  
这篇文章主要介绍了举例详解Java中的访问权限修饰符,是Java入门学习中的基础知识,需要的朋友可以参考下

访问权限符:
(1)public:
对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中。
对于类来说:    也是一样。
(2)friendly:
对于成员老说:如果一个类的成员没有任何权限修饰,那么它门就是缺省包访问权限,用friendly来表示,注

意friendly不是Java中的关键字,这里是个人喜欢的方式用它表示而已。同一个包内其它类可以访问,但包外

就不可以。对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录

的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件

中,虽然没有引入package,但隶属于相同的default package。

   class Sundae{
   //以下两个方法缺省为friendly
   Sundae(){}
   Void f() {System.out.println(“Sundae.f()”);
   }
   public class IceCream{
   public static void main(String[] args){
   Sundae x = new Sundae();
   x.f();
   }
   }

对于类来说:同一个包中的类可以用。总之,类只可以声明为public或者friendly。
(3)private:
对于对于成员来说:只能在该成员隶属于的类中访问。

class Sundae{
   private Sundae(){}//只能在Sundae class中被调用
   Sundae(int i) {}
   static Sundae makASundae() {
   return new Sundae();
   }
   }
   public class IceCream{
   public static void main(String[] args){
   // Sundae class中构造函数Sundae()是private,
   // 所以不能用它进行初始化
   //Sundae x = new Sundae();
   Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用
   Sundae z = Sundae.makASundae();
   }
   }

对于类来说:类不可以声明为private。

(4)protected:
对于对于成员来说:相同包中的类可以访问(包访问权限);基类通过protected把基类中的成员的访问权限赋予派生类不是所有类(派生类访问权限)。

(5)default(默认权限)
  类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用。

例子:package c05.local;

import pack1.Cookie;
//注意:在这里ChocolateChip继承了类Cookie,按道理bite()方法也在
//ChocolateChip中,可以用x.bite直接调用,但是不可以的,因为类ChocolateChip
//和Cookie类不在一个包中,各自具有包访问权限,为了能够使用x.bite()必须要把
//Cookie方法的访问权限换成public或者protected,但是一旦换成public所有的人就
//可以访问了,这样达不到隐私的要求,所以设置成protected最好,既可以顺利访问,也可以
//避免外面的类调用,保护好隐私的作用
public class ChocolateChip extends Cookie {
 
  public ChocolateChip() {
   System.out.println("ChocolateChip constructor");
  }
  public static void main(String[] args) {
   ChocolateChip x = new ChocolateChip();
   x.bite(); // Can't access bite
  
  }
} ///:~
package pack1;

public class Cookie {
public Cookie()
{
System.out.println("Cookie constructor");
}

protected void bite(){System.out.println("bite");}

}


对于类来说:类不可以声明为protected

 

对于类的权限修饰,下面有更好的解释:

Class类的访问权限:
public:可以供所有的类访问。
默认:默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限。
         即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到,即使可以实例化该类
         (当然如果这个类不具有实例化的能力除外,比如该类没有提供public的构造函数)。

说明:
       1、每个编译单元(类文件)都仅能有一个public class
       2、public class的名称(包含大小写)必须和其类文件同名。
       3、一个类文件(*.java)中可以不存在public class。
        这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作,而且
       我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调用这个类的类)看而伤脑筋,而且有可能过一段时间之后
       有可能会彻底改变原有的做法,并完全舍弃旧版本,以全新的版本代替。
       4、class不可以是private和protected。
       5、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是class的static的成员(属性和方法)可以办到。

综合示例:
First.java:

package Number; 
import Test.*; 
 
public class Frist extends Test 
{ 
protected String s1 = "你好"; 
public static void main( String[] args) 
{ 
String s2 = "java"; 
//System.out.println(s1); 
System.out.println(s2); 
 
Frist t = new Frist(); 
System.out.println(t.s); 
t.show(); 
return; 
} 
 
} 
 
Test.java: 
package Test; 
 
 
public class Test  
{ 
protected String s = "hello test"; //可以被同包中的类访问以及子类访问,该子类可以是与包Test不同 
public void show() 
{ 
Test1 t1 = new Test1(); 
return; 
} 
 
 
} 
 
class Test1 
{ 
Test1() 
{ 
Test t = new Test(); 
System.out.println(t.s); 
} 
} 

输出: 

java 
hello test 
hello test 

相关文章

  • JAVA Integer类常用方法解析

    JAVA Integer类常用方法解析

    这篇文章主要介绍了JAVA Integer类常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • elasticsearch启动警告无法锁定JVM内存

    elasticsearch启动警告无法锁定JVM内存

    今天小编就为大家分享一篇关于elasticsearch启动警告无法锁定JVM内存,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MyBatis分页插件PageHelper的具体使用

    MyBatis分页插件PageHelper的具体使用

    这篇文章主要介绍了MyBatis分页插件PageHelper的具体使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 利用Sharding-Jdbc组件实现分表

    利用Sharding-Jdbc组件实现分表

    这篇文章主要为大家详细介绍了利用Sharding-Jdbc组件实现分表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • IntelliJ IDEA2020.1版本更新pom文件自动导包的方法

    IntelliJ IDEA2020.1版本更新pom文件自动导包的方法

    这篇文章主要介绍了IntelliJ IDEA2020.1版本更新pom文件自动导包的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • java命令执行jar包的多种方法(四种方法)

    java命令执行jar包的多种方法(四种方法)

    本文通过四种方法给大家介绍java命令执行jar包的方式,每种方法通过实例代码给大家详解,需要的朋友参考下吧
    2019-11-11
  • Java类的继承实例详解(动力节点Java学院整理)

    Java类的继承实例详解(动力节点Java学院整理)

    在Java开发中,我们常常用到继承这一概念,可以说继承是Java这类面向对象编程语言的基石,今天小编一起和大家一起学习java类的继承
    2017-04-04
  • Java11 发布前抓紧掌握这些新特性

    Java11 发布前抓紧掌握这些新特性

    Java 11即将发布,你准备好了? 在这篇文章中,我们讨论下在进入Java 11之前,你需要了解的Java 8、9和10的一些有用功能,若还在用Java 8以前的版本,那就太落伍了,这里首先要明确,Java 8:是一个针对传统传统版本的重大转变
    2018-09-09
  • Spring Security如何在Servlet中执行

    Spring Security如何在Servlet中执行

    这篇文章主要介绍了Spring Security如何在Servlet中执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 详解JAVA 内存管理

    详解JAVA 内存管理

    这篇文章主要介绍了JAVA 内存管理的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论