访问权限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:声明时没有加修饰符,同一包中的类可以访问:当子类 ...
随机推荐
- CentOS+Nginx一步一步开始配置负载均衡
Nginx负载均衡的理解 http://www.linuxdiyf.com/linux/10205.html Nginx是一个轻量级的.高性能的WebServer,他主要可以干下面两件事: 作为htt ...
- java中的hashtable
好久没写博客了,这次总结一下hashtable,哈希表是我们在数据结构时候所学,在网络安全时候,老师说可以用来加密,在数据库中,可以用来当作索引. http://www.cnblogs.com/leo ...
- test-from
title header1 hahhahjl header2 adfkljasd $$a^2$$ point 1 point 2 | table1 | table2 | | ---- | ---- | ...
- 使用正则表达式匹配JS函数代码
使用正则表达式匹配JS函数代码 String someFunction="init"; Pattern regex = Pattern.compile("function ...
- c++学生成绩管理系统
虽然比较水 =.= 但是写了两节课+一个中午 都是强迫症的锅 http://www.cnblogs.com/wenruo/p/4940182.html #include <cstdio> ...
- hdoj 3849 By Recognizing These Guys, We Find Social Networks Useful【双连通分量求桥&&输出桥&&字符串处理】
By Recognizing These Guys, We Find Social Networks Useful Time Limit: 2000/1000 MS (Java/Others) ...
- Ubuntu下开启root登陆
亲手安装过Ubuntu的童鞋都知道,默认安装只会添加一个普通用户名和密码,而超级用户权限则是利用sudo命令来执行.在Ubuntu下使用root登陆或者在shell中用su命令切换到root时会提示错 ...
- 【转】Spring的WebServiceTemplate访问WebService的方法及其本质原理
WebService客户端调用的本质就是将SAOP格式的XML通过通信协议发送到WebService的服务器端,然后接收服务器端返回的XML. 本文简单介绍一下如何通过Spring提供的WebServ ...
- centos6.5安装tomcat8.0.15
首先需要在http://tomcat.apache.org/download-80.cgi下载最新安装包 安装tomcat 将apache-tomcat-8.0.15.tar.gz文件上传到/usr/ ...
- [React] React Fundamentals: Accessing Child Properties
When you're building your React components, you'll probably want to access child properties of the m ...