【发布时间】:2016-10-17 06:53:35
【问题描述】:
我收到了一个问题,以确定以下访问是否合法。
package SomePack;
public class A1 {
...
protected int y1;
}
///////////
package Whatever;
class B2 extends A1 {
void h(SomePack.A1 x) {
x.y1 = 3; // Is this line legal?
}
}
我认为这大概是合法的,因为
1. y1 字段为protected
2. B2 extends A1 所以 B2 是 A1 的子类型。
3.访问控制基于静态类型,x的静态类型为A1。
但是面试官说这个答案应该是非法的。任何人都可以帮助解释这一点吗?非常感谢。
【问题讨论】:
-
恕我直言,正确的面试答案是:“编译没关系,一开始就不应该这样做!”
标签: java