MST

星途 面试题库

面试题:Java中不同访问控制符对继承的影响

在Java中,有public、protected、default(包访问权限,无关键字)和private四种访问控制符。请阐述protected和default访问控制符在继承体系中的表现有何不同,通过代码示例说明。
16.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 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();
    }
}
  1. 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访问权限局限于同一包内,即使有继承关系,不同包的子类也不能访问。