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

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

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

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

package com.java;
public class admin{
//成员变量的访问权限
public int i1 = ;
protected int i2 = ;
private int i3 = ;
int i4 = ;//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 = ;
protected int b2 = ;
private int b3 = ;
int b4 = ;
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 = ;
protected int i2 = ;
private int i3 = ;
int i4 = ;
}

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

----------------------成员变量的访问权限-------------------------
                                  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:不管在成员变量还是成员方法中都可以访问

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

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

------http://www.cnblogs.com/wing411/---------

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

  1. 访问修饰符 public private protected default

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

    通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况) 如下Test.java中内容: package com.java; /* * ...

  3. public private protected default

    public private protected default 这几个限定访问控制符只是在编译阶段起作用,在运行阶段不起作用 private修饰符 , 本类可以访问 default修饰符 , 本类, ...

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

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  5. Java的访问权限详解(3+1)public private protected default

    Java使用三个关键字在类的内部设定访问权限:public.private.protected.这些访问指定词(access specifier)决定了紧跟其后被定义的成员(方法或属性)可以被谁使用. ...

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

    为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...

  7. java中public private protected default的区别

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...

  8. C#访问修饰符(public,private,protected,internal,sealed,abstract)

    为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...

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

    修饰符 当前类 同 包 子 类 其他包 public √ √ √ √ protecte d √ √ √ × default √ √ × × private √ × × × 类的成员不写访问修饰时默认为 ...

  10. public private protected default小结

    public:可以被所有其他类所访问: private:只能被自己访问和修改: protected:自身.子类及同一个包中类可以访问: default:声明时没有加修饰符,同一包中的类可以访问:当子类 ...

随机推荐

  1. iOS开发学习记录【整理】

    ◆ 开发环境基于 MacBook / Mac OS 10.10 / Xcode 6.1 / iOS 8 1.关于@property 在 .h 里声明了@property之后,默认 .m 不需要写@sy ...

  2. 关于 unity5.3.1 录制 animation 带有 rotation 信息打包 Android 会运动错乱的问题

         Unity5.3.1 录制 animation 带有 rotation 信息打包 Android 会运动错乱的问题 ,临时解决方法是:在动画面板中点击 rotation 属性,右键选择菜单中 ...

  3. 招商银行支付dll在64位windows系统下的注册使用问题

    按照文档中的说明,注册完dll后,依然报找不到COM组件的错误.尝试过以下方法: 1.在VS中将项目编译目标改为x86,只能解决VS可以启动程序的问题,一部署到IIS中就出错. 2.估计是因为权限问题 ...

  4. AIX 添加开机启动项

    在学习本主题之前,还是先学习一些AIX关于启动的基础知识,如果你只关心如何开机自动重启程序,请跳过第一章.第二章. ----------------------------第一章 AIX开机启动过程介 ...

  5. wuzhicms常见函数方法的整理收集

    函数(方法) 含义功能 PHP file_exists() 函数 检查文件或目录是否存在.如果指定的文件或目录存在则返回 true,否则返回 false 五指cms MSG MSG($msg, $go ...

  6. Import the Add Email and Post Configuration to the SiteMap managed solution -Dynamices CRM

    We have prepared a managed solution named Add Email and Post Configuration to SiteMap that you can i ...

  7. jsp 相关特性

    下面要注意一个问题,“只要浏览器关闭,session就消失”,那么这个论断是否正确呢?对于session除非程序通知服务器删除一个 session,否则服务器会一直保留,程序一般都是在用户做log o ...

  8. weekend110(Hadoop)的 第一天笔记

    (2015年1月10日) 课程目录 01-hadoop职位需求状况 02-hadoop课程安排 03-hadoop应用场景 04-hadoop对海量数据处理的解决思路 05-hadoop版本选择和伪分 ...

  9. WIN10环境下搭建与连接VPN服务器

    搭建VPN服务器 0.前言 1.WIN+E打开此电脑 2.勾选始终显示菜单,并应用,确定 3.新建传入连接,可以添加用户,也可以直接选取已有用户 连接VPN服务器 1.打开vpn设置 2.添加vpn连 ...

  10. redis多实例运行

    有的时候会遇到一种情况,在一台服务器,一个redis实例会出现不够用的情况 那么这时我们可以创建多个实例,以满足不同的业务需求和功能需求 1.首先创建一个运行redis的普通用户 useradd -s ...