抽象类
1.两个类DemoA,DemoB里面都有共性的功能,可以进行抽取。但是,如果功能的声明相同,但是功能的具体内容不同。这时,我们只对相同的功能声明进行抽取,而不是抽取功能的内容。
2.抽象类就是子类不断的向上抽取而来的,只抽取了子类的功能声明,而没有抽取子类的具体的功能内容。所以功能是抽象的,需要定义在抽象类中。
3.抽象类的特点:(1)抽象类和抽象方法必须用abstract关键字修饰。
(2)抽象方法一定要存放在抽象类中。
(3)抽象类不可以被实例化。也就是不可以通过该类建造对象。因为抽象 类建立对象后,调用抽象方法没有意义。
(4)只有抽象类的子类将抽象类中的抽象方法全部覆盖掉,该子类就可以建立对象了。如果只是部分覆盖,那么该子类还是一个抽象类。
例如:abstract class Demo{
Abstract void show();
这是这个函数就看不懂,因为没有方法体。所以就需要被标识一下成看不懂的函数,就需要一个关键字abstract(抽象),当此类出现抽象方法后,该类也必须标识成抽象的。
}
抽象类什么时候定义?
当我们分析事物时,对对象进行描述时,其实就是不断把对象中的共性内容向上抽取。在抽取的过程中,发现对象具备相同的功能,但是功能的细节不同。这是在定义类时,该功能没有具体的实现,是由具体的对象来完成的。那么该功能就是抽象的。
抽象类的一些细节:
1.抽象类中是否有构造函数?
有,只要是class定义的类,里面肯定有构造函数。抽象类中的构造函数,用于给予类提供实例化。其实抽象类和一般函数没什么区别。该怎么描述事物就怎么描述。只不过,有些功能,该是类中无法确定的内容,所以比普通类多了个抽象方法。
2.抽象类中是否可以不定义抽象方法?
可以,只不过没有抽象方法的抽象类存在的意义仅仅是不让过该类创建对象。因为创建的没有意义。这种情况多在java awt中有具体的体现。这种情况不多见。
3.抽象关键字和哪些关键字不可以共存?
1.final:如果方法被抽象就需要被覆盖,而final是不可以被覆盖的,所以冲突。
2.private:如果函数私有化,子类无法直接访问,无法覆盖。
3.static:静态不需要调用对象,类名即可直接调用抽象方法,而调用抽象方法没有意义。
子父类中覆盖的一些细节?
1.子类覆盖父类必须要保证权限大于等于父类。(重点,一定要注意权限)
2.静态覆盖静态。