免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1173 | 回复: 6
打印 上一主题 下一主题

小弟问2个java问题,谢谢大家 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-16 17:34 |只看该作者 |倒序浏览
What will be the result of executing the following code?

// Filename; SuperclassX.java
package packageX;

public class SuperclassX
{
        protected void superclassMethodX()
        {
        }
        protected int superclassVarX;
}


// Filename SubclassY.java
1.        package packageY;
2.        import packageX.*;
3.        public class SubclassY extends SuperclassX
4.        {
5.                SuperclassX objX = new SubclassY();
6.                SubclassY objY = new SubclassY();
7.                void subclassMethodY()
8.                {
9.                        objY.superclassMethodX();
10.                        int i;
11.                        i = objX.superclassVarX;
12.                }       
13.        }



答案是11行错了(here will be a compilation error at line 11 as objX is not allowed to access any protected member of the SuperclassX.),但我觉得没有错啊





问2

What will happen when you compile and run the following code?

import java.util.*;

public abstract  interface Test1
{
        public void test();
}

public class Test2 implements Test1
{
        public void test(){}
}

论坛徽章:
0
2 [报告]
发表于 2004-08-16 20:45 |只看该作者

小弟问2个java问题,谢谢大家

1: 加 protected  就是为了限制包外的访问,即使子类也不行。

2: 同一个java文件中好像只允许一个声明一个public 类吧。

论坛徽章:
0
3 [报告]
发表于 2004-08-17 09:09 |只看该作者

小弟问2个java问题,谢谢大家

protected 不是允许不同包的子类访问的吗?  default是只允许包内访问


第二个就是test2类,的申明有问题?把上面的interface的public去了就可以了?

论坛徽章:
0
4 [报告]
发表于 2004-08-17 18:07 |只看该作者

小弟问2个java问题,谢谢大家

>; protected 不是允许不同包的子类访问的吗? default是只允许包内访问

ObjX 是 SuperclassX 的实例,objX.superclassVarX 属于从外部的访问方式,所以不行。如果你把 objX 去掉,直接访问 superclassVarX,就没问题;或者通过 objY.superclassVarX 的方式访问也可以。

>; 第二个就是test2类,的申明有问题?把上面的interface的public去了就可以了?

第二个有两个问题,首先,interface 的申明不应该加 abstract;另外,interface 要自己单独存在于一个文件。

论坛徽章:
0
5 [报告]
发表于 2004-08-18 09:27 |只看该作者

小弟问2个java问题,谢谢大家

原帖由 "dennis2" 发表:
>; protected 不是允许不同包的子类访问的吗? default是只允许包内访问

ObjX 是 SuperclassX 的实例,objX.superclassVarX 属于从外部的访问方式,所以不行。如果你把 objX 去掉,直接访问 superclassVarX,?.........


protected允许自己以及自己的子类访问,
那么objX是自己(SuperclassX)的实例,他为什么不能访问自己的变量呢?

论坛徽章:
0
6 [报告]
发表于 2004-08-18 11:02 |只看该作者

小弟问2个java问题,谢谢大家

>; protected允许自己以及自己的子类访问,
>; 那么objX是自己(SuperclassX)的实例,他为什么不能访问自己的变量呢?

我前面讲得不够清楚,应该是这样:

在别的 package 里的子类只能通过自己或自己子类的 reference 来访问父类的 protected members。具体到你的例子:SubclassY 与 SuperclassX 不在同一个 package 里,所以 SubclassY 要想访问 SuperclassX 的 protected member,必须通过自己或自己子类的 reference。objY 是它自己的 reference,所以可以通过 objY 来访问父类的 protected member;objX 是它的父类的一个 reference,不是它自己或它的子类的 reference,所以不能访问它的 protected member。

论坛徽章:
0
7 [报告]
发表于 2004-08-18 12:24 |只看该作者

小弟问2个java问题,谢谢大家

恩,谢谢,我刚刚也看了sun的文章,的确包内和包外的做法是不一样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP