解释:抽象,抽取事物的共性
特点
1 方法只有声明没有实现时,该方法是抽象方法,要被abstract修饰,抽象方法必须定义在抽象类中,该类也被abstract修饰。
2 抽象类不可以被实例化,为什么?
解答:调用抽象方法没有意义。
3 抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,这个子类还是抽象类。问题:
1 抽象类中有构造函数吗?
解答:有,用于给子类对象初始化。
2 抽象类可以不定义抽象方法吗?
解答:可以,但是十分少见,目的就是让该类创建对象。AWT的适配器对象就是这种类,通常这种类的方法有方法体,但是没有内容。
例如
abstract class Demo{
void show() { }
}
3 抽象关键字不可以和哪些关键字共存?
解答:
1).private :因为一个abstract方法需要被重写,所以不能修饰为private;
2).final:因为一个abstract方法需要被重写。被final修饰的方法是不能被重写的,所以不能同final共存;
3).static:因为一个abstract方法没有方法体。静态方法需要对方法体执行内容分配空间,所以不能同static共存;(abstract是没有实现的,不能产生对象,而是static是属于类的,类本身是已经存在的对象);
4).synchronized: 是同步的,然而同步需要具体的操作才能同步,但, abstract是只有声明没有实现的(即,使用synchronized关键字的是需要有具体的实现同步的操作的,但是使用abstract是只有声明而没有实现的,这样就产生了冲突);
5).native:他们本身的定义就是冲突的,native声明的方法是移交本地操作系统实现的,而abstract是移交子类对象实现的,同时修饰的话,导致不知道谁实现声明的方法。
4 抽象类和一般类的异同点
相同点:抽象类和一般类都是用来描述事物的,在内部定义了成员。
不同点:
1.一般类有足够的信息描述事物,抽象类有可能不足;
2.一般类不能定义抽象方法,抽象类可以定义抽象方法和非抽象方法。
3.一般类可以被实例化,抽象类不可以被实例化。
5.抽象类一定是父类吗?
解答:是的,因为需要其子类覆盖其方法后才可以实现对子类实例化。