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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© blackstones1 中级黑马   /  2014-6-3 20:14  /  1096 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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())这句似懂非懂的,跪求大婶详解

5 个回复

倒序浏览
ds.doSome(new BaseStudent())中ds.doSome()表示 执行DoStudent 中的doSome方法,而这个方法需要的参数是Student类的方法,而BaseStudent是Student的子类,并提供study()和sleep()方法,new BaseStudent()表示提供对象方法并传递,不知道这么说对不对,我基础也不是很好
回复 使用道具 举报
因为doSome()方法需要传递的是Student类,所以new  BaseStudent是提供一个对象作为参数传进去,本来需要的是Student对象,而传递是Student的子类,所以这里是个多态。就相当于Student stu = new BaseStudent();

点评

相当于向上转型。  发表于 2014-6-3 21:16
回复 使用道具 举报
王亚亚 发表于 2014-6-3 20:55
因为doSome()方法需要传递的是Student类,所以new  BaseStudent是提供一个对象作为参数传进去,本来需要的 ...

给力 大赞
回复 使用道具 举报
开始有点晕 结合你们给的说话 看了下书 和函数调用那块的视频 已经搞懂了 谢谢了:hug:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马