类及成员的属性——成员的可访问性

12.2 成员的可访问性

  • 类中成员的修饰符4种:private、默认、protected、public。
  • 这些修饰符说明了成员可否在其他类中使用

12.2.1 public——公共用品

  • 用public修饰的成员变量或方法可以在其他类中被调用
  • 通过<对象名.成员名>被使用。
//Example1203.java
public class Example1203
{
    public static void main(String[] args)
    {
        MyClass mc = new MyClass();
        System.out.println(mc.i);        //调用MyClass类成员变量i
        mc.out();        //调用MyClass类out()方法
                            //out()不在Example1203类中,可以通过生成对象来调用。因为out()方法是public类型,所以可以被调用
     }
}

class MyClass
{
    public int i = 1;
    public void out()
    {
       System.out.println("one"); 
    }    
}

通过类MyClass的对象mc,public类型的成员变量方法可以出现在Example1203中,调用它就像调用当前类中的变量和方法功能。

12.2.2 protected——大家族的东西(同一包中的类、不同包中的子类使用

用protected修饰过的成员变量和方法只可以被同一包中的类或不同包中的子类调用

12.2.3 默认——当前家庭中的东西,只有同一包中的类能用

没有属性控制符,就是默认访问控制属性。

//MyClass.java
package mypackage;
public class MyClass
{
    int a = 5;    //默认属性变量
    void sumTwo(int i, int j)    //默认属性方法
    {
          System.out.println(i+j);      
    }
}
//Example1204.java
import mypackage.MyClass    //或者import mypackage.*;
public class Example1204
{
    public static void main(String[] args)
    {
        MyClass mc = new MyClass();
        System.out.println(mc.a);    //不在同一个包中,默认属性无法调用
        mc.sumTwo(12345,54321);    //不在同一个包中,默认属性无法调用
    }
}

不同包中默认类型的成员不可被访问。

12.2.4 private——是当前类所有的特性,其他类都无法使用

private修饰的成员变量或方法只能在同一个类中被访问在任何其他类中都不可被访问

总结:

1、public、protected、默认、private的访问控制越来越严。

2、成员的访问控制,采用不同的访问属性,可以获得不同层次的信息隐藏

访问控制属性表
  同一个类的成员 同包不同类的成员 不同包中子类成员 不同包非子类的成员
public yes yes yes yes
protected yes yes yes no
默认 yes yes no no
private yes no no no

3、在程序中,如果遇到类的修饰符与成员的修饰符不一致时,以类的修饰符为主

原文地址:https://www.cnblogs.com/jolene-wu/p/8321271.html