当前位置: 首页 > 面试题库 >

父类中的受保护方法在其他包中的子类中可见吗?

裴和怡
2023-03-14
问题内容

看起来很傻,但是我真的很困惑。请看下面的代码:

package com.one;
public class SuperClass {
    protected void fun() {
        System.out.println("base fun");
    }
}
----
package com.two;
import com.one.SuperClass;
public class SubClass extends SuperClass{
    public void foo() {
        SuperClass s = new SuperClass();
        s.fun(); // Error Msg: Change visibility of fun() to public 
    }
}

我已经从Oracle文档读取和在这里为好,即 protected成员在另一个包也子类可见
。因此fun()应该在第二包的子类中可见。那为什么会出错呢?

我是否非常想念一些非常明显的东西?


问题答案:

在Java语言规范说

可以从包的外部访问对象的受保护成员或构造函数,而在包中只能通过负责该对象实现的代码声明该对象。

这意味着,如果要在原始类的包之外编写子类,则每个对象都可以在 其自身 上调用父类的受保护方法,而不能在其他对象上调用。

在您的示例中,由于与s是不同的对象this,因此您无法调用s.fun()。但是对象可以自己调用fun方法-with
this.fun()或just fun()



 类似资料:
  • 我有两个不同包的亲子班。我正在重写受保护类型的方法。我想访问子类中的超类保护方法。 考虑以下代码: 认为我是Java新手,并在main方法中提供替代comment的答案。

  • 为什么我们不能降低能见度,但可以提高能见度? 此外,我需要实现模板模式,其中可见的公共方法只能是基类。

  • 问题内容: 关键字授予对相同包和子类(http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html)中的类的访问权限。 现在,每个类都有一个超类(http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html)。 因此,我得出结论,即使每个类都可以访问的方法。

  • 我尝试模拟父类的受保护方法。因此,我使用&。我的家长班。

  • 问题内容: 如何在受保护的python类中定义一个方法,只有子类才能看到它? 这是我的代码: 我只希望看到的方法的子类。 问题答案: Python不像C ++ / Java / C#支持访问保护。一切都是公开的。座右铭是:“我们都是成年人。” 记录下您的课程,并坚持要求您的合作者阅读并遵守文档。 Python的文化是,以下划线开头的名称意味着:“除非您真正知道应该使用这些名称,否则请不要使用它们。

  • 问题内容: 这是相同问题的详细阐述版本。 我们无法访问子类(位于不同包中)的子类中的(超类的)受保护变量。我们只能访问supeclass的继承变量。但是,如果将修饰符更改为“ protected static”,那么我们也可以访问超类的变量。为什么会这样呢? 这是我试图解释的相同代码段。 以上行为是预期的。但是我的问题是,如果我们将超类实例变量“ a”的访问修饰符更改为“保护静态”,那么我们也可以