黑马程序员技术交流社区

标题: 一个小问题 [打印本页]

作者: 刘勇强    时间: 2013-2-24 21:56
标题: 一个小问题
本帖最后由 刘勇强 于 2013-2-24 22:58 编辑
  1. class DoStudent
  2. {
  3.         public void doSome(Student stu)
  4.         {
  5.                 stu.study();
  6.                 stu.sleep();
  7.         }
  8. }

  9. class  DuoTaiDemo3
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                
  14.                 DoStudent ds = new DoStudent();
  15.                 ds.doSome(new BaseStudent());// 括号中  把 new BaseStudent() 换成 ds  ,可以吗?
  16.                 ds.doSome(new AdvStudent());
  17.         }
  18.         
  19.         
  20. }
复制代码

作者: 宋蓬勃    时间: 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