黑马程序员技术交流社区
标题:
一个小问题
[打印本页]
作者:
刘勇强
时间:
2013-2-24 21:56
标题:
一个小问题
本帖最后由 刘勇强 于 2013-2-24 22:58 编辑
class DoStudent
{
public void doSome(Student stu)
{
stu.study();
stu.sleep();
}
}
class DuoTaiDemo3
{
public static void main(String[] args)
{
DoStudent ds = new DoStudent();
ds.doSome(new BaseStudent());// 括号中 把 new BaseStudent() 换成 ds ,可以吗?
ds.doSome(new AdvStudent());
}
}
复制代码
作者:
宋蓬勃
时间:
2013-2-24 22:16
不可以,Dostudent 没有继承Student
作者:
lzw123451
时间:
2013-2-24 22:20
本帖最后由 李志卫 于 2013-2-24 22:23 编辑
doSome(Student stu) 传入的是Student对象,而 ds是DoStudent 对象。这里就不合适了。
你BaseStudent类应该继承了Student类,这是可以的,属于多态。
这里的doSome类,和Student并没有继承或实现关系。所以不行。
作者:
陈圳
时间:
2013-2-24 22:40
public void doSome(Student stu)
{
stu.study();
stu.sleep();
}
带着你走一遍程序:如果把()内的stu类对象改成ds,那就程序就会这样走.
ds.study();
ds.sleep();
而你在定义dostudent类的时候,里面并没有并义这俩个方法,程序自然会报错.
你可以继承Student类,然后通过多态,//子类使用父类方法.
相当于Student stu=new DoStudent ds();
把子类当作参数传进去,调用从父类继承来的方法study()/sleep()
作者:
刘勇强
时间:
2013-2-24 22:58
经你们一说 恍然大悟... 不过 让我自己想的话 估计还得钻半天牛角尖里去.. 多谢.... 调用函数的对象和作为函数参数的对象弄混了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2