从另一个程序包调用受保护的方法吗?

index.html:
<base href="/myApp">

package1: public class A{ protected void Display(){ System.out.println("Hello"); } } package2: import package1.*; class C extends A{} public class B{ public static void main(String[] args){ C var = new C(); var.Display(); //error } } C的子类。访问修饰符A表示相同的程序包或继承(可以通过子类从另一个程序包访问)。但是,当我尝试从另一个包中调用protected方法时。没用。

wenhaoyu123 回答:从另一个程序包调用受保护的方法吗?

protected对子类可见。如果该类本身不是A的子类,则它无权访问该方法(即,该类不能调用或引用该方法)。

B不是A的子类。即使其调用受保护方法的对象是A的子类的实例,但B本身也无法访问该方法,因为它不是A的子类。>

换句话说,通过Display()的实例,对C的调用将在B中有效,而不在C中有效。即使在C内部,也只能在C自己的实例上使用它。

,

由于Displayprotected的成员而出现错误,因此它在A的子类中可见,而B不是{的子类{1}}。

package1

A

package2

package package1;
public class A{
    protected void Display(){
        System.out.println("Hello");
    }
}

附带说明:

  1. 关注Java naming conventions,例如该方法 package package2; import package1.A; class C extends A { public void someMethod() { Display();// No error } } public class B { public static void main(String[] args) { C var = new C(); var.Display();// Error } } 应命名为Display
  2. 尝试发布编译无错误的代码。您发布的代码有很多编译错误,例如您在包声明中错过了关键字display
本文链接:https://www.f2er.com/2403003.html

大家都在问