JAVA抽象类

来源:互联网 发布:多益网络面试测试 编辑:程序博客网 时间:2024/05/21 19:38
一个类在描述事物时,没有足够的信息来描述这个事物,这个类就是抽象类。

如“犬科”类,该类有犬科的一些基本属性,但是犬科动物与犬科动物的属性和行为方法有区别。
此时应将犬科类定义为抽象类。

特点:
1、方法只有定义而没有实现时,该方法就是抽象方法,需要被abstract修饰。
抽象方法必须在抽象类中,该类也必须被abstract修饰。
2、抽象类不能被实例化。因为抽象方法无意义。
3、抽象类必须有其子类覆盖了所有抽象方法时,该子类才可以实例化。
否则该子类还是一个抽象类

abstract class Demo{    abstract void show();   //加abstract关键字代表这是一个抽象方法,当有抽象方法存在时,类也需要加abstract关键字。                            //此方法不加大括号,没有方法体,只有一个抽象的定义。}

1、抽象类中是否有构造函数。
有,用于给子类对象进行初始化

2、抽象类是否可以不定义抽象方法
可以,但是很少见。目的是不让该类创建对象。AWT的适配器对象就是这种类。
通常这个类中的方法有方法体,但方法体没有内容

abstract class Demo    {        void show1(){}        void show2(){}    }

3、抽象关键字不可以和哪些关键字共存
private 因为抽象方法需要被子类覆盖,抽象类中的方法若使用了private关键字,则子类无法对其进行覆盖。
static
final final修饰的类被继承,修饰的方法不能被覆盖

4、抽象类和一般类的异同点
同:
抽象类和一般类都是用来描述事物的,都在内部定义了成员
不同:
1、一般类有足够的信息描述事物
抽象类的信息可能不足
2、一般类中不能定义抽象方法
抽象类中可以定义抽象方法以及非抽象方法
3、一般类可以被实例化
抽象类不可以被实例化

5、抽象类是否一定是父类
TRUE
因为需要子类覆盖其所有抽象方法后才能对子类进行实例化。
若子类B未覆盖抽象类A的所有抽象方法,此时B还是个抽象方法
虽然抽象方法B是A的子类,但是因为抽象方法没有全部被覆盖,此时类B无法实例化
只有抽象类B的子类C对其进行完全覆盖,类B的子类C才可以实例化,此时B是C的父类

原创粉丝点击