两个类DemoA DemoB里面都有共性的功能,可以进行抽取。
可是功能的声明相同,但是功能的具体内容不同。
这时,我们只对相同的功能声明进行抽取。而抽取功能的内容。
抽象类就是子类不断向上抽取而来的,只抽取了子类的功能声明,而没有抽取子类的具体的功能内容。
所以功能是抽象的,需要定义在抽象类中。
抽象类的特点:
1,抽象类和抽象方法必须用abstract关键字修饰。
2,抽象方法一定要存放在抽象类中。
3,抽象类不可以被实例化。也就是不可以通过该类建立对象。
因为抽象类建立对象后,调用抽象方法没意义。
4,只有抽象类的子类将抽象类中的抽象方法全都覆盖掉,该子类就可以了建立对象了。
如果只是部分覆盖,那么该子类还是一个抽象类。
抽象类什么时候定义。
当我们分析事物时,对对象进行描述时,其实就不断把对象中的共性内容向上抽取。
在抽取过程中,发现对象具备相同的功能,但是功能的细节不同。
这是在定义类时,该功能是没有具体的实现的,是由具体的对象来完成的。
那么该功能就是抽象的。
/*
抽象类的一些细节:
1,抽象类中是否有构造函数。
有。只要是class定义的类,里面肯定有构造函数。
抽象类中的构造函数,用于给子类提供实例化。
其实抽象类和一般类没什么区别。该怎么描述事物,就怎么描述。
只不过,有些功能,该是类中无法确定内容个,所以比普通类多了抽象方法。
2,抽象类中是否可以不定义抽象方法。
可以的,,没有抽象方法的抽象类存在意义仅仅是不让该类创建对象。因为创建的没意义。
这种情况在java awt中有具体体现。 这种情况不多见。
3,抽象关键字和哪些关键字不可以共存。
final:如果方法被抽象,就需要被覆盖,而final是不可以被覆盖,所以冲突。
编译提示:非法的修饰符组合:abstract 和 final
private:如果函数被私有了,子类无法直接访问,怎么覆盖呢?
编译提示:非法的修饰符组合:abstract 和 private
static : 不需要对象,类名既可以调用抽象方法。而调用抽象方法没有意义。
编译提示:非法的修饰符组合:abstract 和 static |
|