黑马程序员技术交流社区

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

作者: shuizhuqing    时间: 2015-4-29 00:22
标题: 抽象类
两个类DemoA DemoB里面都有共性的功能,可以进行抽取。
可是功能的声明相同,但是功能的具体内容不同。

这时,我们只对相同的功能声明进行抽取。而抽取功能的内容。

抽象类就是子类不断向上抽取而来的,只抽取了子类的功能声明,而没有抽取子类的具体的功能内容。
所以功能是抽象的,需要定义在抽象类中。

抽象类的特点:
1,抽象类和抽象方法必须用abstract关键字修饰。
2,抽象方法一定要存放在抽象类中。
3,抽象类不可以被实例化。也就是不可以通过该类建立对象。
        因为抽象类建立对象后,调用抽象方法没意义。
4,只有抽象类的子类将抽象类中的抽象方法全都覆盖掉,该子类就可以了建立对象了。
        如果只是部分覆盖,那么该子类还是一个抽象类。
抽象类什么时候定义。

当我们分析事物时,对对象进行描述时,其实就不断把对象中的共性内容向上抽取。
在抽取过程中,发现对象具备相同的功能,但是功能的细节不同。
这是在定义类时,该功能是没有具体的实现的,是由具体的对象来完成的。
那么该功能就是抽象的。

/*
抽象类的一些细节:

1,抽象类中是否有构造函数。
                有。只要是class定义的类,里面肯定有构造函数。
                抽象类中的构造函数,用于给子类提供实例化。
                其实抽象类和一般类没什么区别。该怎么描述事物,就怎么描述。
                只不过,有些功能,该是类中无法确定内容个,所以比普通类多了抽象方法。


2,抽象类中是否可以不定义抽象方法。
                可以的,,没有抽象方法的抽象类存在意义仅仅是不让该类创建对象。因为创建的没意义。
                这种情况在java awt中有具体体现。 这种情况不多见。

3,抽象关键字和哪些关键字不可以共存。
                final:如果方法被抽象,就需要被覆盖,而final是不可以被覆盖,所以冲突。
                                编译提示:非法的修饰符组合:abstract 和 final
                private:如果函数被私有了,子类无法直接访问,怎么覆盖呢?
                                编译提示:非法的修饰符组合:abstract 和 private
                static : 不需要对象,类名既可以调用抽象方法。而调用抽象方法没有意义。
                                编译提示:非法的修饰符组合:abstract 和 static




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