roc*_*ock 2 java inheritance protected
我有一个A班级,package1并B在package2其中继承A.A包含方法m1是protected.现在我的疑问是,当我B在另一个类中创建一个对象时,C也是package2,对象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
}
}
Run Code Online (Sandbox Code Playgroud)
超类的受保护方法在子类中变为私有吗?
受保护的成员或对象的构造函数可以从包外部访问,只能通过负责实现该对象的代码来声明它.
设C是声明受保护成员的类.仅允许在C的子类S的主体内访问.
装置的protected修饰符指定了构件只能在其自己的封装件内被访问的(与包专用),此外,通过它的类的另一个包的子类.
所以你可以m1从类访问方法,B即使它不在同一个包上,因为它是它的子类A.
但是你不能m1从类访问方法,C因为它既不在同一个包中,A也不在它的子类中A.
因此,要访问此方法,您可以将方法设为m1public,或将您的类移动C到与类相同的包中A