黑马程序员技术交流社区
标题:
继承问题的小迷惑
[打印本页]
作者:
小发
时间:
2013-8-7 10:46
标题:
继承问题的小迷惑
本帖最后由 小发 于 2013-8-8 20:12 编辑
如下面代码
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呢
照理说Son继承了Father的 speak();而Son中的String language="java";
应该打印的是java啊
作者:
王松松
时间:
2013-8-7 11:04
因为,你的子类没有覆盖父类的方法,那么调用speak()方法时调用的是父类的方法,这时方法里面的变量前相当于this.language,所以打印的是父类的 "vb”。
与你用学习!{:soso_e141:}
作者:
张玉建
时间:
2013-8-7 11:06
/*
这里子类继承的父类,子类沿袭了父类的功能到子类,
子类是具备这个功能,但该功能却与父类不一致了,
所以复写父类的功能,定义自己子类的功能主题,
这里子类中定义了子类的变量,未覆盖父类的功能主体,
当主函数调用该方法时,那个方法指向的是父类。*/
作者:
小发
时间:
2013-8-7 11:14
张玉建 发表于 2013-8-7 11:06
/*
这里子类继承的父类,子类沿袭了父类的功能到子类,
子类是具备这个功能,但该功能却与父类不一致了,
明白了
子类当中没有重写父类的speak方法,那么调用子类对象的speak方法时候会用继承下来的父类中的方法
作者:
昨夜星风
时间:
2013-8-7 12:03
本题中虽然 Son extends Father,子类沿袭了父类的功能到子类,
在栈内存中建立对象new Son() 但是在方法区 子类当中没有重写父类的speak方法
所以在调用speak方法时,执行的是加载好的父类中的speak方法
作者:
HM张博文
时间:
2013-8-7 12:18
二楼的正解,参考下吧
作者:
糯米酿酒
时间:
2013-8-7 13:47
子类没有复写父类的方法,调用的任然是父类的,相当于父类中的this.language
作者:
心灵之歌
时间:
2013-8-7 20:44
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啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2