黑马程序员技术交流社区

标题: 抽象类 [打印本页]

作者: 王红霞    时间: 2012-7-10 18:44
标题: 抽象类
毕老师的抽象类视频中我听得有点模糊……
既然子类继承父类之后  还是要在子类中复写一遍父类中的方法  为什么还要写一个抽象类??
可不可以不写函数相同主体不同的抽象函数只写函数和主体都相同的抽象函数?在代码较少的情况下会不会更简便一些?
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");
            }
}


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

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




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