java protected权限成员变量外部可改变吗?_[Java教程]访问权限PPP(public、private、protected、default)之成员变量、成员变量权限解析...

[Java教程]访问权限PPP(public、private、protected、default)之成员变量、成员变量权限解析

0 2015-08-11 21:00:25

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

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

方法体;

}

然后我们需要知道成员变量和成员方法访问有几种情况: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:不管在成员变量还是成员方法中都可以访问

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

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

本文网址:http://www.shaoqun.com/a/131868.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值