MST

星途 面试题库

面试题:Java中不同访问控制符在类继承中的表现

在Java中,有public、protected、default(包访问权限,无关键字)和private这几种访问控制符。假设存在一个父类和一个子类,子类继承自父类,请阐述不同访问控制符修饰的父类成员变量和方法,在子类中的访问规则分别是怎样的?
36.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

public

  • 成员变量和方法:子类可以无限制地访问父类中被 public 修饰的成员变量和方法。无论子类与父类是否在同一个包中,都能直接通过对象调用。例如:
class Parent {
    public int publicVar;
    public void publicMethod() {}
}
class Child extends Parent {
    void accessPublic() {
        publicVar = 10;
        publicMethod();
    }
}

protected

  • 成员变量和方法
    • 同一包内:子类可以直接访问父类中被 protected 修饰的成员变量和方法,与 public 类似。例如:
package samePackage;
class Parent {
    protected int protectedVar;
    protected void protectedMethod() {}
}
class Child extends Parent {
    void accessProtected() {
        protectedVar = 20;
        protectedMethod();
    }
}
- **不同包内**:子类也可以访问父类中 `protected` 修饰的成员变量和方法,但只能通过继承的方式访问,不能通过父类对象访问。例如:
package differentPackage;
import samePackage.Parent;
class Child extends Parent {
    void accessProtected() {
        protectedVar = 30;
        protectedMethod();
    }
}

default(包访问权限,无关键字)

  • 成员变量和方法
    • 同一包内:子类可以访问父类中具有包访问权限的成员变量和方法,就像访问 publicprotected 的成员一样直接。例如:
package samePackage;
class Parent {
    int defaultVar;
    void defaultMethod() {}
}
class Child extends Parent {
    void accessDefault() {
        defaultVar = 40;
        defaultMethod();
    }
}
- **不同包内**:子类无法访问父类中具有包访问权限的成员变量和方法,即使是通过继承关系也不行。

private

  • 成员变量和方法:无论子类与父类是否在同一个包中,子类都无法直接访问父类中被 private 修饰的成员变量和方法。例如:
class Parent {
    private int privateVar;
    private void privateMethod() {}
}
class Child extends Parent {
    // 下面的代码会报错,无法访问private成员
    // void accessPrivate() {
    //     privateVar = 50;
    //     privateMethod();
    // }
}