java - 为什么在Java中从子类访问 protected 方法时会出现编译错误?

标签 java inheritance subclass protected

我正在阅读 Java 中的 protected 修饰符,哪些字段可以在同一个包和子类中访问。

现在我已经写了一些代码。

package com;

public class Parent {

    protected void print()
    {
        System.out.println("dFDF");
    }
}

现在是子类。

package abstraact.concept;

import com.Parent;

    public class BaseParent extends Parent{

        public void printNum()
        {
            Parent p = new Parent();
            p.print(); /** Getting error here */
                    // The method print() from the type Parent is not visible
        }



        public static void main(String[] args) {
            BaseParent pp = new BaseParent();
            pp.printNum();

        }
    }

为什么我会收到错误消息? 因为 protected 方法/变量可以从子类访问。

最佳答案

这是Java中常见的“悖论”,其实根本就不是悖论。简而言之,由于语言的安全(可见性)规则,无法通过另一个包中的对象引用访问 protected 方法。

一旦声明了一个新对象,它具有(或允许)的可见性由代码所属的包控制,而不是由继承层次结构控制。

打电话

super.print();

this.print();

会起作用。

关于java - 为什么在Java中从子类访问 protected 方法时会出现编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22411387/

相关文章:

java - 使用 Stream 将逗号分隔的字符串转换为数组

java - Zend/PHP : how to perform HTTP POST to controller and mapper php classes

java - 动态选择类别

c# - 更改派生类中属性的 xml 描述

objective-c - UIViewController 子类无法分配实例变量

ios - Swift 对类进行子类化的问题

java - Hibernate @Audited 与 @Version 冲突

java - 跨类访问H2连接

java - 我可以在 Java 中使用子类对象作为参数来覆盖吗?

java - 如何从父引用调用子方法?