下面这段代码输出是什么?为什么?(java)

1.publicclassBase{2.publicstaticfinalStringFOO="foo";3.publicstaticvoidmain(String[]a... 1. public class Base{
2. public static final String FOO = "foo";
3. public static void main(String[] args){
4. Base b = new Base();
5. Sub s = new Sub();
6. System.out.print(Base.FOO);
7. System.out.print(Sub.FOO);
8. System.out.print(b.FOO);
9. System.out.print(s.FOO);
10. System.out.print(((Base)s).FOO);
11. }
12. }
13. class Sub extends Base{public static final String FOO = "bar";}
展开
 我来答
guxi20000
2011-08-17 · TA获得超过287个赞
知道小有建树答主
回答量:280
采纳率:0%
帮助的人:237万
展开全部
是楼上的结果
因为子类Sub 覆盖了父类的FOO
所以父类的实例中为 b:foo
子类实例中为 s:bar
System.out.print(Base.FOO); System.out.print(b.FOO);是父类所以显示foo
System.out.print(Sub.FOO); System.out.print(s.FOO); System.out.print(((Base)s).FOO);是子类显示bar
所以结果为 foobarfoobarfoo
追问
System.out.print(((Base)s).FOO);这句代码是什么意思?是强转吗,这样强转的有什么意思?
追答
(Base)s是强转成Base类,使用父类的标志来引用
在这里没有什么意义,不过在有些情况下是有用

比如说,你的Sub中有几个方法是Base没有的,但是你的实例是Sub,又不想别人能调用那几个方法,呵呵,你就可以强转成为Base传递给别人,那么别人就只能调用Base中有的方法或者字段了
lhy20062008
2011-08-17 · 超过10用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:31.2万
展开全部
经过我的测试,输出结果为:foobarfoobarfoo。你一句一句执行就会知道原因了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
抱雪的互联网之路
2011-08-17 · 计算机教师
抱雪的互联网之路
采纳数:103 获赞数:216

向TA提问 私信TA
展开全部
个人认为
foo
bar
foo
bar
foo
我记得类中静态变量在继承中不产生多态,但也会有多态的效果。
追问
主要是第10行代码是什么意思?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式