J2SE_访问权限(public, protected, default, private)

来源:互联网 发布:淘宝suvi韩国代购假货 编辑:程序博客网 时间:2024/05/17 20:24

一、四种访问权限简介

1)public: 公共访问权限,不管在本类,本包,子类,不同包中都可以访问被public修饰的属性和方法

2)protected: 包级访问权限,在本包中和其他包的子类中可以访问

3)default: 包级访问权限,在本包中可以访问,出了本包都是非法的

4)private: 类级访问权限,只有在本类可以访问,出了本类都是非法的

二、简图


三、示例代码

1)类A

四种不同访问权限的方法

package com.wbf.test1;public class A {public void pub(){System.out.println("...public...");}protected void pro(){System.out.println("...protected...");}void def(){System.out.println("...default...");}private void pri(){System.out.println("...private...");}}
2)类B

与A类同一个包,不是A的子类。除了private方法不可以方法,其他的都可以。

package com.wbf.test1;//与A类同一个包,不是A的子类public class B {public static void main(String args[]){A a = new A();a.pub();  //pub()为A的public方法a.pro();  //pro()为A的protected方法a.def(); //def()为A的default方法//a.pri(); //pri()为A的private方法}}
3)类C

与A不同包,不是A的子类。除了public方法可以访问,其他的都不可以。

package com.wbf.test2;import com.wbf.test1.A;//与A不同包,不是A的子类public class C {public static void main(String args[]){A a = new A();a.pub();  //pub()为A的public方法//a.pro();  //pro()为A的protected方法//a.def(); //def()为A的default方法//a.pri(); //pri()为A的private方法}}
4)类A1

与A同包,是A的子类。除了private方法不可以访问,其他的都可以。

package com.wbf.test1;import com.wbf.test1.A;//与A同包,是A的子类public class A1 extends A {public static void main(String[] args) {A a = new A();a.pub();  //pub()为A的public方法a.pro();  //pro()为A的protected方法a.def(); //def()为A的default方法//a.pri(); //pri()为A的private方法A1 a1 = new A1();a1.pub();a1.pro();a1.def();//a1.pri();}}
5)类A2

与A不同包,是A的子类。

通过子类A1可以访问从父类继承来的public和protected方法,default和private方法不可以访问。

通过父类A来访问自身的方法,发现只有public方法可以访问,因为其他3中方法的访问权限都是在包级以内的,出了包,就不可以访问了。

package com.wbf.test2;import com.wbf.test1.A;//与A不同包,是A的子类public class A2 extends A {public static void main(String[] args) {A a = new A();a.pub();  //pub()为A的public方法//a.pro();  //pro()为A的protected方法//a.def(); //def()为A的default方法//a.pri(); //pri()为A的private方法A2 a2 = new A2();a2.pub();a2.pro();//a2.def();//a2.pri();}}
四、小结

1)default和protected都是包级访问权限,出了包就都不可以方法。但是protected属性或方法可以在不同包的子类中访问。

2)从thinking in java和 core java中都可以看出,子类继承了父类的所有属性和方法,只不过private属性和方法的访问级别是类级别,出了本类就无法访问了。


0 0
原创粉丝点击