【发布时间】:2014-04-17 18:06:12
【问题描述】:
- 我有以下 Foo 类,其中包含 main 方法。
- Foo 扩展了 Nee。
- Foo 类在 com.package1 中,Nee 类在 com.package2 中。
- 问题是我无法从 Foo 访问受保护的 Nee 方法 类通过它的对象。为什么会这样?(理论说受保护的成员可以被同一个包中的子类或类访问)
Foo 类如下所示,
package com.package1;
import com.package2.Nee;
/**
*
* @author Dilukshan Mahendra
*/
public class Foo extends Nee{
public static void main(String[] args) {
Nee mynee = new Nee();
/* mynee.sayProtected(); This gives me a compile error,
sayProtected() has protected
access in com.package2.Nee
*/
}
}
Nee 类如下所示,
package com.package2;
/**
*
* @author Dilukshan Mahendra
*/
public class Nee {
protected void sayProtected(){
System.out.println("I'm a protected method in Nee!");
}
}
【问题讨论】:
-
你正试图从另一个包访问。
-
受保护的成员只能通过子类对象在包或子类中访问。在不同的包中,您不能通过超类对象访问受保护的成员
-
@AloneInTheDark 是的,但它是 Nee 的子类,理论上说您可以访问同一包内的受保护成员或从包外的子类访问受保护的成员
-
@Braj 你能举个例子吗?
-
@DilukshanMahendra 它只是不能那样工作。
Foo无法访问Nee上的受保护成员。
标签: java access-modifiers