当前位置:   article > 正文

java中有哪些访问修饰符_java中四种访问修饰符

访问修饰符包括____________、____________、默认、protected。

Java中的四种访问修饰符:public、protected、default(无修饰符,默认)、private。

四种修饰符可修饰的成分(类、方法、成员变量)

public

protected

default

private

×

×(内部类可以用private修饰)

方法

成员变量

四种修饰符的访问权限

public:对所有类可见

protected:对同一包中的类可见、对同一包及不同包中的子类可见

default:对同一包中的类可见、对同一包中的子类可见

private:仅对类本身可见

可见是可访问的意思,即由这些修饰符修饰的成分(类、方法、成员变量)可以被其它类访问。对子类可见即子类可以继承。

这里需要注意的是protected与default,二者的区别在于不同包中的子类是否可以继承。

访问权限

同一包

同一包中的子类

不同包中的子类

不同包

public

protected

×

default

×

×

private

×

×

×

×

例如

package1:ParentClass、ChildClassOne、TestOne

package2:ChildClassTwo、TestTwo

package3:TestThree

其中ParentClass为

public class ParentClass {

public int a=2;

protected int b = 3;

int c = 4;

private int d = 5;

}

1.对于TestOne来说,ParentClass类、a、b、c均可见,d不可见。即在TestOne中可以new一个ParentClass对象,且该对象中的a,b,c变量可操作。如下:

public class TestOne {

public static void main(String args[]) {

ParentClass obj = new ParentClass();

System.out.println(obj.a);

System.out.println(obj.b);

System.out.println(obj.c);

//System.out.println(obj.d); //d 不可见

}

}

2.ChildClassOne继承ParentClass且与其在同一个包中,则a、b、c均可见,d不可见。

public class ChildClassOne extends ParentClass{

public static void main(String args[]) {

ChildClassOne obj = new ChildClassOne();

System.out.println(obj.a);

System.out.println(obj.b);

System.out.println(obj.c);

//System.out.println(obj.d); // d不可见

}

}

3.ChildClassTwo继承ParentClass,则a、b均可见,d不可见,由于子类与ParentClass不在同一包中,故c(default类型)不可见。

public class ChildClassTwo extends ParentClass{

public static void main(String args[]) {

ChildClassTwo obj = new ChildClassTwo();

System.out.println(obj.a);

System.out.println(obj.b);

//System.out.println(obj.c); // c不可见

//System.out.println(obj.d); // d不可见

}

}

4.对于TestTwo来说,ParentClass类、a均可见,b、c、d不可见。由于TestTwo与ParentClass不在同一个包中,故只有public修饰的成分可见。

public class TestTwo {

public static void main(String args[]) {

ParentClass obj = new ParentClass();

System.out.println(obj.a);

//System.out.println(obj.b); // b 不可见

//System.out.println(obj.c); // c 不可见

//System.out.println(obj.d); // d 不可见

}

}

另外值得注意的是继承父类的子类与其他类之间的可见性,取决于其他类与父类之间的可见性。

对于TestOne来说,ChildClassOne中a,b,c都可见,d不可见,这是由于TestOne与ParentClass在同一个包中。

而对于TestThree来说,ChildClassOne中只有a可见,这是由于TestThree与ParentClass在不同的包中。

需要注意:

虽然a、b对ChildClassTwo可见,TestTwo与ChildClassTwo在同一包中,

但对于TestTwo来说,ChildClassTwo中只有a可见,这是由于TestTwo与ParentClass在不同的包中,只有public修饰的可见。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/194206
推荐阅读
相关标签
  

闽ICP备14008679号