A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小发 中级黑马   /  2013-8-7 10:46  /  1661 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小发 于 2013-8-8 20:12 编辑

如下面代码
  1. public class Father {
  2.         String tool="computer";
  3.         String language="vb";
  4.         void speak(){
  5.                 System.out.println("language....."+language);
  6.         }
  7.         void use(){
  8.                 System.out.println("tool....."+tool);
  9.         }
  10.         
  11. }
复制代码
  1. public class Son extends Father{
  2.         String language="java";

  3. }
复制代码
  1. public class Test11 {
  2.         public static void main(String[] args) {
  3.                 Son s=new Son();
  4.                 s.speak();
  5.                 System.out.println(s.language);
  6.                 s.use();
  7.                
  8.         }
  9. }
复制代码
为什么s.speak(); 打印的不是java呢
照理说Son继承了Father的 speak();而Son中的String language="java";
应该打印的是java啊

点评

你好,哥们,恭喜你活动幸运奖品,黑马程序员文化衫1件,及时私信我你的邮寄信息。  发表于 2013-8-7 15:21

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

8 个回复

倒序浏览
因为,你的子类没有覆盖父类的方法,那么调用speak()方法时调用的是父类的方法,这时方法里面的变量前相当于this.language,所以打印的是父类的 "vb”。

与你用学习!{:soso_e141:}
回复 使用道具 举报
/*
这里子类继承的父类,子类沿袭了父类的功能到子类,
子类是具备这个功能,但该功能却与父类不一致了,
所以复写父类的功能,定义自己子类的功能主题,
这里子类中定义了子类的变量,未覆盖父类的功能主体,
当主函数调用该方法时,那个方法指向的是父类。*/

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
张玉建 发表于 2013-8-7 11:06
/*
这里子类继承的父类,子类沿袭了父类的功能到子类,
子类是具备这个功能,但该功能却与父类不一致了,

明白了
子类当中没有重写父类的speak方法,那么调用子类对象的speak方法时候会用继承下来的父类中的方法
回复 使用道具 举报
本题中虽然 Son extends Father,子类沿袭了父类的功能到子类,
在栈内存中建立对象new Son()   但是在方法区   子类当中没有重写父类的speak方法
所以在调用speak方法时,执行的是加载好的父类中的speak方法
回复 使用道具 举报
二楼的正解,参考下吧
回复 使用道具 举报
子类没有复写父类的方法,调用的任然是父类的,相当于父类中的this.language
回复 使用道具 举报
public class Father {
        String tool="computer";
        String language="vb";
        void speak(){
                System.out.println("language....."+language);
        }
        void use(){
                System.out.println("tool....."+tool);
        }
        
}
复制代码
public class Son extends Father{
        String language="java";

}
复制代码
public class Test11 {
        public static void main(String[] args) {
                Son s=new Son();
                s.speak();
                System.out.println(s.language);
                s.use();
               
        }
}
复制代码
为什么s.speak(); 打印的不是java呢////因为 language是属性,不是方法。子类继承父类,属性值不会改变。
照理说Son继承了Father的 speak();而Son中的String language="java";
应该打印的是java啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马