从Java中的子类访问受保护的方法时,为什么会出现编译错误?

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

现在我写了一些代码.

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();

        }
    }

为什么我收到错误?
因为受保护的方法/变量可以从子类访问.

最佳答案
这是Java中常见的“悖论”,实际上根本就没有悖论.简单地说,由于语言的安全性(可见性)规则,人们无法通过另一个包中的对象引用访问受保护的方法.

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

调用

super.print();

要么

this.print();

将工作.

转载注明原文:从Java中的子类访问受保护的方法时,为什么会出现编译错误? - 代码日志