访问权限
- 类中被public修饰的字段、方法:可以被该类的 实例、子类(无论子类和父类是否在同一个包中) 访问。
- 类中被protected修饰的字段、方法:可以被该类的 同一包的实例、子类(无论子类和父类是否在同一个包中) 访问。
- 类中被default修饰的字段、方法:可以被该类的 同一包的实例、子类(子类父类在同一个包中) 访问。
- 类中被private修饰的字段、方法:可以被该类自己访问。
- 总结下:
- public:所有可见
- protected:包可见、子类、自己可见
- default:包、自己可见
- private:自己可见
package com.dr.java.packagetest.package1;
public class SamePackage {
public void printPublic(){
System.out.println("public method");
}
void printDefault(){
System.out.println("default method");
}
protected void printProtected(){
System.out.println("protected method");
}
private void printPrivate(){
System.out.println("private method");
}
private void test(){
this.printPublic();
this.printProtected();
this.printDefault();
this.printPrivate();
}
}
package com.dr.java.packagetest.package1;
import com.dr.java.packagetest.package2.OtherPackage;
public class MainClass {
public static void main(String[] args){
SamePackage samePackage=new SamePackage();
samePackage.printPublic();
samePackage.printProtected();
samePackage.printDefault();
OtherPackage otherPackage =new OtherPackage();
otherPackage.printPublic();
}
}
package com.dr.java.packagetest.package1;
import com.dr.java.packagetest.package2.OtherPackage;
public class ExtendOtherPackage extends OtherPackage {
public void test(){
super.printPublic();
super.printProtected();
}
}
package com.dr.java.packagetest.package1;
public class ExtendSamePackage extends SamePackage {
public void test(){
this.printPublic();
this.printDefault();
this.printProtected();
}
}
package com.dr.java.packagetest.package2;
public class OtherPackage {
public void printPublic(){
System.out.println("public method");
}
void printDefault(){
System.out.println("default method");
}
protected void printProtected(){
System.out.println("protected method");
}
private void printPrivate(){
System.out.println("private method");
}
}