访问权限PPP(public、private、protected、default)之成员变量、成员变量权限解析
首先,我们需要清楚一下方法是由哪些部分构成的:
[权限修饰符列表][别的修饰符列表] 返回值类型 方法名(参数列表){
方法体;
}
然后我们需要知道成员变量和成员方法访问有几种情况: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)之成员变量、成员变量权限解析的更多相关文章
- 访问修饰符 public private protected default
- 访问权限系列一(public/private/protected/default):成员变量
通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况) 如下Test.java中内容: package com.java; /* * ...
- public private protected default
public private protected default 这几个限定访问控制符只是在编译阶段起作用,在运行阶段不起作用 private修饰符 , 本类可以访问 default修饰符 , 本类, ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- Java的访问权限详解(3+1)public private protected default
Java使用三个关键字在类的内部设定访问权限:public.private.protected.这些访问指定词(access specifier)决定了紧跟其后被定义的成员(方法或属性)可以被谁使用. ...
- 访问修饰符(public,private,protected,internal,sealed,abstract)
为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...
- java中public private protected default的区别
1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...
- C#访问修饰符(public,private,protected,internal,sealed,abstract)
为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...
- 访问修饰符 public,private,protected,以及不写(默认) 时的区别?
修饰符 当前类 同 包 子 类 其他包 public √ √ √ √ protecte d √ √ √ × default √ √ × × private √ × × × 类的成员不写访问修饰时默认为 ...
- public private protected default小结
public:可以被所有其他类所访问: private:只能被自己访问和修改: protected:自身.子类及同一个包中类可以访问: default:声明时没有加修饰符,同一包中的类可以访问:当子类 ...
随机推荐
- css网站导航-菜单
一个简单的网站导航效果: 效果案例:查看演示 css: ;;;} body{font-family: arial, 宋体, serif;font-size: 12px;} .menu{width:11 ...
- 【HTML】Intermediate3:Meta Tags
1.Meta tags were the town criers of the Internet Do anything to the content that is presented in the ...
- 揭开嵌入式c面试题背后的玄机
今天老大让我针对一个面试者出些嵌入式方面的面试题,主要是想对他的技术深度进一步了解.我就出了下面这些问题,每个问题背后都是考察一个嵌入式程序员应该具备的相关技能.当然这些只是我的个人理解,不一定正确. ...
- POJ 1661 Help Jimmy DP
思路:Jimmy 跳到一块板上后,可以有两种选择,向左走或向右走.走到左端和走到右端所需的时间,容易算出. n如果我们能知道,以左端为起点到达地面的最短时间,和以右端为起点到达地面的最短时间,那么向左 ...
- delphi 提取字符中的数字
Function Setstring(cString:string):string; {提取数字} VAr i:integer; str:string; begin str:='' ...
- 部署 外网 ASP.NET程序时, IIS安全性 配置 -摘自网络
最近,和朋友们在聊及ASP.NET程序的安全性没有JAVA高,IIS(Internet Infomartion Server)的存在很多漏洞(以及新型蠕虫,例如Code Red 和Nimda),安全得 ...
- 利用gdb 调试android jni c动态库
http://blog.dornea.nu/2015/07/01/debugging-android-native-shared-libraries/ Since I haven't done thi ...
- MySql中启用InnoDB数据引擎的方法
1.存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...
- Redis以及Redis的php扩展安装无错版
安装Redis 下载最新的 官网:http://redis.io/ 或者 http://code.google.com/p/redis/downloads/list 第一步:下载安装编译 #wge ...
- ScheduledExecutorFactoryBean忽略异常继续执行
ScheduledExecutorFactoryBean忽略异常继续执行 程序中有一个定时任务,每10分钟把满足条件的任务从一个表迁移到另一张表,程序启动的时候数据库异常了一段时间,之后数据库恢复了. ...