use*_*848 13 java protected subclass modifier package
我在两个不同的包中有两个类:
package package1;
public class Class1 {
public void tryMePublic() {
}
protected void tryMeProtected() {
}
}
package package2;
import package1.Class1;
public class Class2 extends Class1 {
doNow() {
Class1 c = new Class1();
c.tryMeProtected(); // ERROR: tryMeProtected() has protected access in Class1
tryMeProtected(); // No error
}
}
Run Code Online (Sandbox Code Playgroud)
我可以理解为什么在调用时没有错误,tryMeProtected()因为Class2它继承了这个方法Class1.
但是,为什么是不是有可能的对象Class2访问此方法的对象上Class1使用 c.tryMeProtected(); ?
Ank*_*hag 14
受保护的方法只能通过包外的子类中的继承来访问.因此第二种方法tryMeProtected();有效.
下面的代码不会编译,因为我们没有调用受保护方法的继承版本.
Class1 c = new Class1();
c.tryMeProtected(); // ERROR: tryMeProtected() has protected access in Class1
Run Code Online (Sandbox Code Playgroud)
请按照此stackoverflow链接获取更多说明.
Ant*_*ond 11
我相信你误解了package与protected能见度之间的区别.
package package1;
public class MyClass1 {
public void tryMePublic() { System.out.println("I'm public"); }
protected void tryMeProtected() { System.out.println("I'm protected"); }
void tryMePackage() { System.out.println("I'm package"); }
}
Run Code Online (Sandbox Code Playgroud)
tryMePublic 随时随地都可以访问.tryMeProtected 每个子类和同一个包中的每个类都可以访问.tryMePackage 将在同一个包中的每个类都可访问(如果它们在不同的包中,则不在子类中提供)package package1;
public class Class2 extends MyClass1 {
public void doNow() {
tryMePublic(); // OK
tryMeProtected(); // OK
tryMePackage(); // OK
}
}
Run Code Online (Sandbox Code Playgroud)
package package2;
import package1.MyClass1;
public class Class3 extends MyClass1 {
public void doNow() {
MyClass1 c = new MyClass1();
c.tryMeProtected() // ERROR, because only public methods are allowed to be called on class instance, whereever you are
tryMePublic(); // OK
tryMeProtected(); // OK
tryMePackage(); // ERROR
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26623 次 |
| 最近记录: |