最近在公司面试的时候,被问到Java的四种访问修饰符的访问域,一时难住了我,平时练习的时候,基本上使用的private和public两种,虽然知道其他两种是default和protected,但是 用的比较少,没有认真的去了解它们具体的访问域,有点知识模糊。今天就归纳总结下。
实现了四个类,分别是父类Parent,同一包下的子类Son,同一包下的其他类SamePackageOtherClass,不同包下的子类OtherPacageSon和其他类OtherPackageOtherClass。
1.Parent类
public class Parent { private String name = ""; private void method1() {return;} void method2() {} protected void method3() {} public void method4() {} }2.Son类
public class Son extends Parent{ //method1不能继承 @Override void method2() { // TODO Auto-generated method stub super.method2(); } @Override protected void method3() { // TODO Auto-generated method stub super.method3(); } @Override public void method4() { // TODO Auto-generated method stub super.method4(); } }3.SamePackageOtherClass类
public class SamePackageOtherClass { private Parent parent = new Parent(); private void method2() { parent.method2(); } private void method3() { parent.method3(); } private void method4() { parent.method4(); } }不同包下的:
1.OtherPackageSon类
public class OtherPackageSon extends Parent{ //method1 not access //method2 not access @Override protected void method3() { super.method3(); } @Override public void method4() { super.method4(); } }2.OtherPackageOtherClass类
public class OtherPackageOtherClass { private Parent parent = new Parent(); private void method3() { parent.method4(); } }1.private修饰的方法、属性只能自身类使用,其他的类(无论是同包下还是其他包的类,还是子类或其他类)都不能继承或访问。(反射另谈)
2.default 访问范围高于private,包括了private域的范围权限外。另外,default只作用于同一个包下的类,子类可继承,同一包下的其他非继承类可访问。其他包的类(子类、非继承类)无法继承或访问。
3.protected的访问域范围高于default,在保证default的权限外,其他包下的子类可继承父类protected方法或属性,但是不同包的非继承类无法访问protected的属性或方法。
4.public作用域最大,同一包的子类、非继承类或者不同包的子类、非继承类都可以继承、访问。
Java基础很重要,面试了多家大公司,他们(面试官)对应聘者(应届生)的JAVA基础很看重。所以,与君共勉,努力夯实基础。~