下面这段代码输出是什么?为什么?(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";} 展开
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";} 展开
3个回答
展开全部
是楼上的结果
因为子类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
因为子类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中有的方法或者字段了
展开全部
经过我的测试,输出结果为:foobarfoobarfoo。你一句一句执行就会知道原因了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
个人认为
foo
bar
foo
bar
foo
我记得类中静态变量在继承中不产生多态,但也会有多态的效果。
foo
bar
foo
bar
foo
我记得类中静态变量在继承中不产生多态,但也会有多态的效果。
追问
主要是第10行代码是什么意思?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |