面试题答案
一键面试同一包下的情况
- 访问权限及可继承性分析:
- 在Java中,当子类和父类在同一个包中时,子类可以访问父类的
protected
成员。 - 由于继承机制,子类会继承父类的
protected
方法。
- 在Java中,当子类和父类在同一个包中时,子类可以访问父类的
- 代码示例:
package com.example.samepackage;
class A {
protected void protectedMethod() {
System.out.println("This is a protected method in A");
}
}
class B extends A {
public void callProtectedMethod() {
protectedMethod();// B类可以访问从A类继承的protected方法
}
}
class C extends B {
public void callProtectedMethodFromC() {
protectedMethod();// C类可以访问从A类继承的protected方法
}
}
class D extends C {
public void callProtectedMethodFromD() {
protectedMethod();// D类可以访问从A类继承的protected方法
}
}
- 测试代码:
package com.example.samepackage;
public class Main {
public static void main(String[] args) {
D d = new D();
d.callProtectedMethodFromD();
}
}
在上述代码中,B
、C
、D
类都能访问A
类的protectedMethod
,因为它们在同一个包中,这体现了protected
成员在同包下的可访问性和可继承性。
不同包下的情况
- 访问权限及可继承性分析:
- 当子类和父类不在同一个包中时,子类仍然可以继承父类的
protected
方法。 - 但是,只有通过子类的实例才能访问
protected
方法,而不能通过父类的实例访问。
- 当子类和父类不在同一个包中时,子类仍然可以继承父类的
- 代码示例:
package com.example.parentpackage;
public class A {
protected void protectedMethod() {
System.out.println("This is a protected method in A");
}
}
package com.example.childpackage;
import com.example.parentpackage.A;
class B extends A {
public void callProtectedMethod() {
protectedMethod();// B类可以访问从A类继承的protected方法
}
}
class C extends B {
public void callProtectedMethodFromC() {
protectedMethod();// C类可以访问从A类继承的protected方法
}
}
class D extends C {
public void callProtectedMethodFromD() {
protectedMethod();// D类可以访问从A类继承的protected方法
}
}
- 测试代码:
package com.example.childpackage;
public class Main {
public static void main(String[] args) {
D d = new D();
d.callProtectedMethodFromD();
}
}
在这个例子中,B
、C
、D
类在不同包中,但仍然可以继承并通过自身实例访问A
类的protected
方法。
合理设置访问控制符以保证安全性和便于子类扩展
- 保证安全性:
- 使用
private
访问控制符来隐藏类内部的实现细节,防止外部直接访问,从而保证安全性。例如,如果A
类中有一些辅助方法,这些方法只供A
类内部使用,不希望子类或其他类直接调用,就可以将这些方法设为private
。
- 使用
- 便于子类扩展:
- 使用
protected
访问控制符,允许子类在需要时访问和重写父类的方法,实现扩展功能。例如,如果A
类提供了一个基本的功能方法,子类可能需要根据自身需求对该方法进行定制化,就可以将该方法设为protected
,子类在继承后可以重写该方法来实现自己的逻辑。 - 同时,合理使用
public
访问控制符,对于需要提供给外部调用的功能方法,设为public
。但要注意,过多的public
方法可能会暴露过多的实现细节,影响安全性,所以要谨慎设置。例如,A
类中有一些稳定的、通用的功能方法,外部类需要调用这些方法来完成某些操作,就可以将这些方法设为public
。
- 使用
通过合理组合private
、protected
和public
访问控制符,可以在保证代码安全性的同时,便于子类进行扩展,实现良好的代码结构和可维护性。