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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘勇强 中级黑马   /  2013-2-24 21:56  /  1946 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘勇强 于 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. }
复制代码

4 个回复

倒序浏览
不可以,Dostudent  没有继承Student     
回复 使用道具 举报
本帖最后由 李志卫 于 2013-2-24 22:23 编辑

doSome(Student stu)  传入的是Student对象,而 ds是DoStudent 对象。这里就不合适了。
你BaseStudent类应该继承了Student类,这是可以的,属于多态。
这里的doSome类,和Student并没有继承或实现关系。所以不行。
回复 使用道具 举报
public void doSome(Student stu)
        {
                stu.study();
                stu.sleep();
        }
带着你走一遍程序:如果把()内的stu类对象改成ds,那就程序就会这样走.
ds.study();
ds.sleep();
而你在定义dostudent类的时候,里面并没有并义这俩个方法,程序自然会报错.
你可以继承Student类,然后通过多态,//子类使用父类方法.
相当于Student stu=new DoStudent ds();
把子类当作参数传进去,调用从父类继承来的方法study()/sleep()
回复 使用道具 举报
经你们一说  恍然大悟...  不过 让我自己想的话 估计还得钻半天牛角尖里去..   多谢.... 调用函数的对象和作为函数参数的对象弄混了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马