登录
首页 >  文章 >  java教程

public与protected权限区别解析

时间:2025-11-14 23:06:39 435浏览 收藏

一分耕耘,一分收获!既然都打开这篇《public和protected访问权限详解》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新文章相关的内容,希望对大家都有所帮助!

public成员可被任何类访问,protected仅限同类、同包或子类继承访问,跨包非子类不可访问。

在Java中public和protected的区别是什么

publicprotected 是 Java 中的两个访问修饰符,它们控制类成员(字段、方法、构造器等)的可见范围。主要区别在于访问权限的宽窄和适用场景。

public 的访问权限

public 修饰的成员可以在任何地方被访问:
  • 同一个类中可以访问
  • 同一个包中的其他类可以访问
  • 不同包中的子类可以访问
  • 不同包中的非子类也可以访问
也就是说,public 是最开放的访问级别,没有限制。

protected 的访问权限

protected 修饰的成员具有较严格的访问控制:
  • 同一个类中可以访问
  • 同一个包中的其他类可以访问(无论是否继承)
  • 不同包中的子类可以访问(必须通过继承关系)
  • 不同包中的非子类不能访问
关键点是:跨包访问 protected 成员时,只有子类可以通过继承来访问,其他无关类不行。

实际例子说明

假设有一个父类在 com.example.Parent
package com.example;

public class Parent {
    public void doPublic() { }
    protected void doProtected() { }
}
在另一个包 com.test 中有一个子类:
package com.test;
import com.example.Parent;

public class Child extends Parent {
    public void test() {
        doPublic();       // 可以访问,public 允许
        doProtected();    // 可以访问,因为是子类
    }
}
但在 com.test 中一个不相关的类:
package com.test;

public class Unrelated {
    public void test() {
        Child child = new Child();
        child.doPublic();      // 可以访问
        child.doProtected();   // 编译错误!即使在同一包也不行(Child 继承了但外部调用受限)
    }
}
注意:虽然 UnrelatedChild 在同一包,但 doProtected() 是从父类继承来的,且不在同一个包中定义,所以不能直接通过对象调用。

总结关键区别

  • public: anywhere, no restrictions
  • protected: same class, same package, or subclass (even across packages),但子类访问必须通过继承机制,不能通过实例随意调用
设计时,如果希望子类能重用或扩展某个方法,但又不想让无关类随意使用,就用 protected;如果需要完全对外公开,则用 public 基本上就这些。

理论要掌握,实操不能落!以上关于《public与protected权限区别解析》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>