我正在阅读 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/