首页 > 学院 > 开发设计 > 正文

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

2019-11-15 01:06:28
字体:
来源:转载
供稿:网友
访问权限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:不管在成员变量还是成员方法中都可以访问

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

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表