[英]What happens to protected method of a super class in base class in Java?
我的package1
有一个A
类,而package2
中的B
继承了A
A
包含protected
方法m1
。 现在我的疑问是,当我在另一个也是package2
类C
创建对象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
}
}
超类的受保护方法在子类中是否私有?
对象的受保护成员或构造函数只能从负责该对象实现的代码在其中声明该对象的包外部访问。
令C为声明受保护成员的类。 仅在C的子类S的主体内允许访问。
意味着 protected
修饰符指定成员只能在其自己的程序包中(与package-private一样)访问,并且只能由其在另一个程序包中的类的子类访问。
因此,即使它不在同一包中,您也可以从类B
访问方法m1
,因为它是A
子类。
但是你不能访问方法m1
从类C
,因为无论它在同一个包A
也没有了它的子类A
。
因此,要访问此方法,您可以将方法m1
公开或将类C
移到与类A
相同的包中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.