面试题答案
一键面试protected
访问控制符在继承体系中的表现:protected
修饰的成员变量和方法,在同一包内可以被访问,就如同default
访问权限一样。同时,在不同包中,子类可以访问protected
修饰的成员。- 示例代码如下:
// 父类
package com.example.parent;
public class ParentClass {
protected int protectedVar;
protected void protectedMethod() {
System.out.println("This is a protected method.");
}
}
// 子类,位于不同包
package com.example.child;
import com.example.parent.ParentClass;
public class ChildClass extends ParentClass {
public void accessProtected() {
protectedVar = 10;
protectedMethod();
}
}
default
(包访问权限)在继承体系中的表现:default
访问权限修饰的成员变量和方法,只能在同一包内被访问。即使存在继承关系,不同包中的子类也无法访问default
修饰的成员。- 示例代码如下:
// 父类
package com.example.parent;
public class ParentDefaultClass {
int defaultVar;
void defaultMethod() {
System.out.println("This is a default method.");
}
}
// 子类,位于不同包
package com.example.child;
import com.example.parent.ParentDefaultClass;
public class ChildDefaultClass extends ParentDefaultClass {
// 以下代码会报错,无法访问default修饰的成员
// public void accessDefault() {
// defaultVar = 10;
// defaultMethod();
// }
}
总结来说,protected
访问控制符在继承体系中提供了更宽泛的访问权限,不仅同一包内可访问,不同包的子类也可访问;而default
访问权限局限于同一包内,即使有继承关系,不同包的子类也不能访问。