访问权限PPP(public、private、protected、default)之成员变量、成员变量权限解析

首先,我们需要清楚一下方法是由哪些部分构成的:

[权限修饰符列表][别的修饰符列表] 返回值类型 方法名(参数列表){
   方法体;
}

然后我们需要知道成员变量和成员方法访问有几种情况:1、当前包同一个类  2、当前包里面别的类  3、别的包里别的类  4、自己包继承关系的类  5、从别的包里有继承关系的类 

第一步先创建一个别的类的代码,示例:

package com.java;
public class admin{
    //成员变量的访问权限
    public int i1 = 10;
    protected int i2 = 20;
    private int i3 = 30;
    int i4 = 40;//default(默认)
}

然后创建带main方法的代码,并创建同包内的class,示例:

package cn.java;
import com.java.admin;
 public class PPP01{
 //public class PPP01 extends Customer{
 //public class PPP01 extends admin{
     //成员变量的访问权限
    public int b1 = 10;
    protected int b2 = 20;
    private int b3 = 30;
    int b4 = 40;
     public static void main(String[] args){
        //相同的包,不同的类,没有继承关系
        Customer a = new Customer();//未继承情况下运行
        System.out.println( a.i1 );
        System.out.println( a.i2 );
        System.out.println( a.i3 );//报错:i3可以在Customer中访问private
        System.out.println( a.i4 );
        //相同的包,相同的类,没有继承关系
        PPP01 b = new PPP01();
        System.out.println( b.b1 );//都可以运行
        System.out.println( b.b2 );
        System.out.println( b.b3 );
        System.out.println( b.b4 );
        //相同的包,不同的类,有继承关系
        Customer c = new Customer();
        System.out.println( c.i1 );
        System.out.println( c.i2 );
        System.out.println( c.i3 );//错误: i3可以在Customer中访问private
        System.out.println( c.i4 );
        //不同的包,不同的类,没有继承关系
        admin d = new admin();
        System.out.println( d.i1 );//在未继承状态下运行
        System.out.println( d.i2 );//错误: i2可以在admin中访问protected
        System.out.println( d.i3 );//错误: i3可以在admin中访问private
        System.out.println( d.i4 );//错误: i4在User中不是公共的; 无法从外部程序包中对其进行访问
        //不同的包,不同的类,有继承关系
        admin e = new admin();
        System.out.println( e.i1 );
        System.out.println( e.i2 );//错误: i2可以在admin中访问protected
        System.out.println( e.i3 );//错误: i3可以在admin中访问private
        System.out.println( e.i4 );//错误: i4在admin中不是公共的; 无法从外部程序包中对其进行访问
     }
 }
class Customer{
    //成员变量的访问权限
    public int i1 = 10;
    protected int i2 = 20;
    private int i3 = 30;
    int i4 = 40;
}

在不同情况下的运行可得出结果

----------------------成员变量的访问权限-------------------------
                                  public       private      protected        default
 当前包同一个类               可以          可以           可以               可以

当前包里面别的类            可以         不可以         可以                可以

别的包里别的类               可以         不可以       不可以             不可以

自己包继承关系的类         可以         不可以        可以(V)           可以(V)

从别的包里有继承关系的类 可以         不可以        可以(V)          不可以(x)

成员方法代码和变量的代码差不多,但是要注意,方法需要返回值return,运算后得出结论:

------------------------成员方法的访问权限---------------------------
                                       public              private              protected             default
 当前包同一个类                  可以                可以                    可以                    可以

当前包里面别的类               可以               不可以                  可以                     可以

别的包里别的类                  可以               不可以                 不可以                  不可以

自己包继承关系的类            可以               不可以                  可以(V)               可以(V)

从别的包里有继承关系的类    可以               不可以                  可以(v)               不可以(x)

根据以上结果,可得出结论:

       (1)protected:如果跨包的话,必须有继承关系才可以,自己的包可以直接访问不受影响

        (2)default:跨包就不可以。

        (3)在实例化子类变量的时候,可以访问父类的成员变量,这才可继承访问权限

        (4)如果在子类中,实例化父类的对象,访问权限不变

       (5)public:不管在成员变量还是成员方法中都可以访问

   以上就是我的理解,请大家多多指导。

欢迎转载,但请注明出处。

时间: 2024-10-05 05:00:25

访问权限PPP(public、private、protected、default)之成员变量、成员变量权限解析的相关文章

访问权限系列一(public/private/protected/default):成员变量

通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况) 如下Test.java中内容: package com.java; /* * 关于成员变量多种情况下的访问权限: * ------------------------------------------------------------------------------ * public private protected default * 1 同一个包,同一个类 可以

深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Inter

深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants) 访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protected at Class Level 在创建类时,我们需要考虑类的作用域范围,如谁可访问该类,谁可访问该类成员变量,谁可访问该类成员函数. 换而言之,我们需

深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protected at Class Level 在创建类时,我们需要考虑类的作用域范围,如谁可访问该类,谁可访问该类成员变量,谁可访问该类成员函数. 换而言之,我们需要约束类成员的访问范围.一个简单的规则,类成员函数.类成员变量之间可以自由 访问不受约束,这里主要说的是外部的访问约束.在创建class的时候,

java中public private protected default的区别

1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用. 3.protected:protected对于子女.朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private. 作用域    当前类  同一package    子孙

访问修饰符(public,private,protected,internal,sealed,abstract)

为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及protectde internal(只有本程序内或者继承于该类的类型可以访问). 可以使用修饰符的对象:namespace(命名空间),class(类),struct(结构),enum(枚举),interface(接口),delegate(委托),function(函数),变量 1.public:

public,private,protected,default 的区别

同类中                    同包中                      其他包中 public                   可以访问                 可以访问                     可以访问 private                 可以访问                  不可以访问                  不可以访问 protected            可以访问                  可以访

访问修饰符public,private,protected,以及不写(默认)时的区别?

答: 修饰符 当前类 同包 子类 其他包public    √   √    √   √protected   √  √    √  ×default  √  √    ×  ×private  √  ×    ×  × 类的成员不写访问修饰时默认为default.默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private).受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有.Java中,外部类的修饰符只能是p

002、访问修饰符public,private,protected,以及不写(默认)时的区别

类的成员不写访问修饰时默认为default.默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private).受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有. 总结如下表 原文地址:https://www.cnblogs.com/TomJay/p/9571202.html

【转】C++ 类访问控制public/private/protected探讨

示例1:---------------------------------------- class C{ int c1; int c2;public: void set(C* s, int i, int j) { s->c1 = i; s->c2 = j; } friend std::ostream& operator<<(std::ostream& os, const C& c);};std::ostream& operator<<(

如何区别java中的public,private,protected

在java语言中我们描述一个类或者一个方法,经常会用到public,private,protected三个关键字,还有一种就是默认的访问权限,即什么都不写. 首先我们介绍public关键字,从字面意义上出发,public意为公共的,可见它的访问权限是很宽松的,是大家所公有的. public的访问权限是最松的,它可以在同一个包内访问,也可以在不同包内访问,它表示紧随其后的元素对任何人都是可用的,   然后就是private,从字面上看,它的意思是私有,可见它的访问权限是比较严格的. 它表示除类型创