java中的访问权限

本文深入探讨了Java中类、方法和变量的访问权限,包括默认访问权限、public、private、protected等修饰符的作用及使用场景。通过具体实例展示了不同访问权限下类成员的可见性,帮助理解Java访问控制的基本概念。
摘要由CSDN通过智能技术生成

1.修饰类

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

例1:Main.java:

 package com.cxh.test1;
 public class Main {  
    public static void main(String[] args) {       
        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类是可见的。
   程序运行结果:  Tom

例子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;
    }
}
运行结果: 提示Peolple类在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;
    }
}

这时运行就会提示错误:  People类中的方法getName()是不可视。

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

例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;
    }
     
    protected String getName() {   
        return name;
    }
     
    protected void setName(String name) {  
        this.name = name;
    }
}
会提示错误: People类中的方法getName()是不可视。

如果在com.cxh.test1中定一个类Man继承People,则可以在类Man中显示调用方法getName和setName:

 package com.cxh.test1;
 import com.cxh.test2.People;
 
 public class Man extends People{
 
    public Man(String name){
        super(name);
    }
     
    public String toString() {
        return getName();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值