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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王红霞 中级黑马   /  2012-7-10 18:44  /  1297 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师的抽象类视频中我听得有点模糊……
既然子类继承父类之后  还是要在子类中复写一遍父类中的方法  为什么还要写一个抽象类??
可不可以不写函数相同主体不同的抽象函数只写函数和主体都相同的抽象函数?在代码较少的情况下会不会更简便一些?
abstract class Student
{
        abstract void study();
        void sleep()
                {
                System.out.println("sleep");
                }
}
class ChongCiStudent extends Student
{
        void study()
                {
                System.out.println("chongci study");
            }
}
class BaseCiStudent extends Student
{
        void study()
                {
                System.out.println("base study");
            }
}
class AdvStudent extends Student
{
        void study()
                {
                System.out.println("adv study");
            }
}
class AbstractDemo
{
        public static void main(String[] args)
                {
                   System.out.println("hello");
            }
}

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
比如说你说的这个学生类 这个类它是个抽象类 但是它有一些共同的属性 学习。。所以定义一个抽象类声明了它的属性。但抽象类没有行动,所以是个不完整的类 因此要被继承,继承以后写出方法体(具体行动)就可以了。而你要是不继承(没有复写父类),就还要写一些啰嗦的代码。这和后面的接口差不多了,只不过类只能单一继承,接口可以多继承。
如果父类不定义抽象类的话,比如说
void study() {
                System.out.println("数学");
            }
那么他的子类都得继承这个学数学,,但是每个学生学的科目可能不一样,也有的不学数学,,比如说一个体育生报道,学校里强行给他一本数学书,强行让他学数学,这可能吗?所以父类要定义抽象的学习方法,然后子类根据自己的要求去复写父类。

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
第一个问题:在父类中定义抽象函数,完全是根据需求而定,比如说一个公司,经理,会计等,都是这个公司的员工,他们都要工作,但是他们的工作形式是不一样,会计是统计公司的财务的,而经理的工作跟会计完全不一样,这样虽为同一公司员工,但是他们的工作是不一样的,因为各自的功能不确定,所以我们就要定义一个抽象方法,让子类去实现父类的功能,记住:同一功能,他们的实现是不相同的,就要定义一个抽象方法,这比你去覆盖父类的方法更简便,同时也优化了代码。
第二个问题:不行吧,因为抽象方法是没有主体的,抽象方法所实现的功能是不确定的
回复 使用道具 举报
既然子类继承父类之后  还是要在子类中复写一遍父类中的方法  为什么还要写一个抽象类??
可不可以不写函数相同主体不同的抽象函数 而只写函数和主体都相同的抽象函数?在代码较少的情况下会不会更简便一些?
===============================================
所谓抽象类的作用,必定是要抽象提取出将要用到的,有相同或相似的成员变量和成员函数,这是为了提高开发效率,也是为了面向对象的思想的一致性。
1.因为父类的作用有时候是为了程序以后的扩展性考虑的,所以方法定义成抽象的,方便以后出现了新的改动后,可以快速更新,以适应新的使用需求。至于抽象类的方法子类是直接拿来使用(因为抽象类中也可能有实现的方法),还是复写之后再拿去使用,这要根据开发中的实际需求来决定,怎么方便怎么效率高,就怎么做。
2.关于第二个问题,看的不是很懂。如果不影响使用,当可以不写。其实,只要是为了提高开发效率,而且还考虑到了程序以后的扩展性,那肯定是怎么简单怎么用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马