繁体   English   中英

Java基类中超类的受保护方法会怎样?

[英]What happens to protected method of a super class in base class in Java?

我的package1有一个A类,而package2中的B继承了A A包含protected方法m1 现在我的疑问是,当我在另一个也是package2C创建对象B时,对象B无法访问方法m1为何? 下面是我的代码

package com.package1;

public class A {

    protected void m1(){
        System.out.println("I'm protectd method of A");
    }
}


package com.package2;

import com.package1.A;

public class B extends A {


    public static void main(String[] args) {

        B b = new B();
        b.m1();          // b object able to access m1

    }

}


package com.package2;

public class C {

    public static void main(String[] args) {

        System.out.println("Hi hello");
        B b = new B();
        b.m1(); //The method m1() from the type A is not visible

    }

}

超类的受保护方法在子类中是否私有?

JLS 6.6.2起。 受保护访问的详细信息

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

令C为声明受保护成员的类。 仅在C的子类S的主体内允许访问。

意味着 protected修饰符指定成员只能在其自己的程序包中(与package-private一样)访问,并且只能由其在另一个程序包中的类的子类访问。

Java Doc控制对类成员的访问
在此处输入图片说明


因此,即使它不在同一包中,您也可以从类B访问方法m1 ,因为它是A子类。
但是你不能访问方法m1从类C ,因为无论它在同一个包A也没有了它的子类A

因此,要访问此方法,您可以将方法m1公开或将类C移到与类A相同的包中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM