黑马程序员技术交流社区

标题: 看到了多态有个疑惑求帮忙 [打印本页]

作者: blackstones1    时间: 2014-6-3 20:14
标题: 看到了多态有个疑惑求帮忙
abstract class Student
{
        public abstract void study();
        public void sleep()
        {
                System.out.println("躺着睡");
        }
}
class BaseStudent extends Student
{
        public void study()
        {
                System.out.println("base study");
        }
        public void sleep()
        {
                System.out.println("趴着睡");
        }
}
class AdvStudent extends Student
{
        public void study()
        {
                System.out.println("Adv study");
        }
}
class DoStudent
{
        public void doSome(Student stu)
        {
                stu.study();
                stu.sleep();
        }
}
class  Duotai
{
        public static void main(String[] args)
        {
                DoStudent ds = new DoStudent();
                ds.doSome(new BaseStudent())
                DoStudent as = new DoStudent();
                as.doSome(new AdvStudent());
        }
}
看到多态,老师写的小程序自己编完之后还是有个疑问,ds.doSome(new BaseStudent())这句似懂非懂的,跪求大婶详解


作者: Lex    时间: 2014-6-3 20:27
ds.doSome(new BaseStudent())中ds.doSome()表示 执行DoStudent 中的doSome方法,而这个方法需要的参数是Student类的方法,而BaseStudent是Student的子类,并提供study()和sleep()方法,new BaseStudent()表示提供对象方法并传递,不知道这么说对不对,我基础也不是很好
作者: 王亚亚    时间: 2014-6-3 20:55
因为doSome()方法需要传递的是Student类,所以new  BaseStudent是提供一个对象作为参数传进去,本来需要的是Student对象,而传递是Student的子类,所以这里是个多态。就相当于Student stu = new BaseStudent();
作者: 淡淡柠檬茶    时间: 2014-6-3 21:05
王亚亚 发表于 2014-6-3 20:55
因为doSome()方法需要传递的是Student类,所以new  BaseStudent是提供一个对象作为参数传进去,本来需要的 ...

给力 大赞
作者: blackstones1    时间: 2014-6-3 22:24
开始有点晕 结合你们给的说话 看了下书 和函数调用那块的视频 已经搞懂了 谢谢了:hug:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2