黑马程序员技术交流社区
标题: 关于继承的小问题 [打印本页]
作者: 安浦鑫 时间: 2012-4-24 12:02
标题: 关于继承的小问题
- class Demo1
- {
- public static void main(String[] args)
- {
- father fa=new father();
- fa.show();
- son s=new son();
- s.show();
- }
- }
- class father
- {
- int num1=5;
- void show()
- {
- System.out.println(num1);
- }
- }
- class son extends father
- {
- int num1=10;
-
- }
复制代码 为何输出的是5,5 不是5,10
很简单 但是自己就是想不通了
作者: 黑马-刘昌文 时间: 2012-4-24 12:08
son s=new son();
s.show();//这里子类s调用的是父类的方法,当然输出的就是父类的变量i。
作者: Friends★ 时间: 2012-4-24 12:13
主要是你子类中没有固定的方法,你在主函数中调来调去,都是调用的是show()方法,而show()方法是父类中特有的,所以值怎么会改变呢,
如果想改变 代码如下:
class Demo1
{
public static void main(String[] args)
{
father fa=new father();
fa.show();
son s=new son();
s.show1();
}
}
class father
{
int num1=5;
void show()
{
System.out.println(num1);
}
}
class son extends father
{
int num1=10;
void show1(){
System.out.println(this.num1);
}
}
运行结果:
5
10
作者: 邱俊杰 时间: 2012-4-24 12:25
本帖最后由 邱俊杰 于 2012-4-24 12:29 编辑
为何输出的是5,5 不是5,10
father fa=new fa
fa.show(); 这里是调用父类的show 很明显是5、
son s=new son();
s.show(); //这里调用的是父类的show 因为你子类没有show方法、所以子类会继承父类的show,
想到子类的变量10参考代码 :
class son extends father
{
int num1=10;
void show()
{
System.out.println(num1); // 加一个show方法在子类就o了
}
}
作者: 程序猿 时间: 2012-4-24 12:28
子类需要覆写父类的方法才可以出现你想要的结果的。
作者: 孙天 时间: 2012-4-24 12:34
在子类的方法show()里其实省略了,应该是System.out.println(super.num1),因为你没有对show()方法进行覆盖,其实调用的是父类的方法,结果让然得出父类的num1
作者: 王敏NO.09 时间: 2012-4-24 12:37
子类并没有覆盖父类的方法,调用的仍然是父类的方法,所以,运行结果为5,5
作者: 真真姐 时间: 2012-4-24 12:41
大家没有理解这个童鞋的意思,
他意思是:在子类里面已经定义了同名的变量 num1,这是子类的变量,子类对象的num1属性应该是10才对,
实际上你的理解很正确,你说的也很正确,但是你有两个地方理解偏差
1、你的所有类都没大写,这个不规范,
2、你在子类中定义了同名的变量,却没有去调用这个变量,打印的是父类的变量
public classExtend {
public static void main(String[] args)
{
fatherfa = newfather();
fa.show();
son s = new son();
s.show();
System.out.println(s.num1); // 加上这么一句话你看看值是多少
}
}
作者: 安浦鑫 时间: 2012-4-24 13:10
理解了 多谢各位
作者: 彭威 时间: 2012-4-24 13:16
因为 第二次 建立子类对象son s=new son();
s.show();
子类s调用的是父类的方法:
其实打印的是这样的:
System.out.println(super.num1),
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |