java - 覆盖 Java 中的 protected 方法

标签 java methods overriding protected

测试.java

package a;
import b.B;
public class Test {
    public static void main(String[] v) {
        new A().test();
        new B().test();
    }
}

A.java:

package a;
public class A {
    protected void test() { }
}

B.java:

package b;
public class B extends a.A {
    protected void test() { }
}

为什么 new B().test() 会报错?这不会违反可见性规则吗?

B.test()Test 中是不可见的,因为它们在不同的包中,但它拒绝调用 test() 在可见的 B 的父类(super class)中。

JLS 适当部分的链接将不胜感激。

最佳答案

这里是 protected 关键字上的 JLS: JLS protected descriptionJLS protected example .

基本上,protected 修饰符意味着您可以访问字段/方法/... 1) 在给定类的子类中 2) 从同一类中的类包裹。

因为 2) new A().test() 有效。但是 new B().test() 不起作用,因为 B 类在不同的包中。

关于java - 覆盖 Java 中的 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637650/

相关文章:

java - Jetty 8.1.1 Websocket 客户端握手

java - 为什么在双击和命令提示符时 Java 应用程序的行为不同

java - 任务声明在 gradle 中不起作用

scala - 在 Scala 中将运算符定义为方法别名的最短表示法是什么?

Pythonic 参数传递

java - 如何在Java中为不同的任务创建不同的方法,然后调用它们?

java - 我如何主要使用其他代码?

java - 谷歌应用程序引擎/Java : ConcurrentModificationException thrown when using session. setAttribute()

python - 覆盖 Django Admin 的主页? - Django

java - 覆盖最终 BluetoothDevice 类的 toString() 方法