SCJP问题(1)

1iuri 2004-11-04 04:19:24
Q1. Given:
1. package test1;
2. public class Test1 {
3. static int x = 42;
4. }
1. package test2;
2. public class Test2 extends test1.Test1 {
3. public static void main(String[] args) {
4. System.out.printIn(“x = “ + x);
5. }
6. }
What is the result?
A. x = 0
B. x = 42
C. Compilation fails because of an error in line 2 of class Test2.
D. Compilation fails because of an error in line 3 of class Test1.
E. Compilation fails because of an error in line 4 of class Test2.

我想编译出错的原因是静态变量不能跨包访问
而运行这段代码,也会提示:
x is not public in test1.Test1;cannot be accessed form outside package
所以我觉得答案应该是E,但答案D ,不知为何?
...全文
99 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
阿钚 2004-11-04
  • 打赏
  • 举报
回复
x is not public in test1.Test1;cannot be accessed form outside package

??

x 定义成public 的就可以编译通过了吗?
1iuri 2004-11-04
  • 打赏
  • 举报
回复
谢谢,看来大多同意为E,结贴:)
treeroot 2004-11-04
  • 打赏
  • 举报
回复
答案明显是E,不声明为public有什么关系,只不过其他人访问不到而已呀.

你声明为protected就可以了
j2nix 2004-11-04
  • 打赏
  • 举报
回复
静态变量是可以跨包调用?
j2nix 2004-11-04
  • 打赏
  • 举报
回复
1、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域 当前类 同一包 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
amwghd 2004-11-04
  • 打赏
  • 举报
回复
static int x = 42;

静态变量是可以跨包调用,这里编译通不过的原因是因为变量x没有声明成public,如果在同一包下,Test2 可以调用Test1的成员变量,反之则必须声明变量为public.
j2nix 2004-11-04
  • 打赏
  • 举报
回复
肯定是E了。

Test1类中的x的访问标识是package的,只在同一个包中其它类才能访问到。
1iuri 2004-11-04
  • 打赏
  • 举报
回复
呵呵,有人插队,我是指johncdc()
1iuri 2004-11-04
  • 打赏
  • 举报
回复
不明白楼上的解释,能否再说详细点,谢谢罗:)
duanma 2004-11-04
  • 打赏
  • 举报
回复
我也不太理解,希望有人给于解答。
johncdc 2004-11-04
  • 打赏
  • 举报
回复
D 正确, 因为继承不是组合。
1iuri 2004-11-04
  • 打赏
  • 举报
回复
up
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2004-11-04 04:19
社区公告
暂无公告