一、四种访问权限简介
1)public: 公共访问权限,不管在本类,本包,子类,不同包中都可以访问被public修饰的属性和方法
2)protected: 包级访问权限,在本包中和其他包的子类中可以访问
3)default: 包级访问权限,在本包中可以访问,出了本包都是非法的
4)private: 类级访问权限,只有在本类可以访问,出了本类都是非法的
二、简图
三、示例代码
1)类A
四种不同访问权限的方法
package com.wbf.test1;2)类B
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...");
}
}
与A类同一个包,不是A的子类。除了private方法不可以方法,其他的都可以。
package com.wbf.test1;3)类C
//与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方法
}
}
与A不同包,不是A的子类。除了public方法可以访问,其他的都不可以。
package com.wbf.test2;4)类A1
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方法
}
}
与A同包,是A的子类。除了private方法不可以访问,其他的都可以。
package com.wbf.test1;5)类A2
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();
}
}
与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属性和方法的访问级别是类级别,出了本类就无法访问了。