abstract 修饰符可以用来修饰类和成员方法。
➢ 用abstract 修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化,即不允许创建抽象类本身的实例。没有用abstract 修饰的类称为具体类,具体类可以被实例化。
➢ 用abstract 修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。没有用abstract 修饰的方法称为具体方法,具体方法才具有方法体。
例如下面的Base 类为抽象类,它包括一个method1()抽象方法和一个method2()具体方法,代码如下:
抽象类可以没有抽象方法,但包括了抽象方法的类必须被定义为抽象类。如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类。例如下面的代码中,Children 类继承了Parent 类,但Children 类仅实现了Parent 类中的method1()抽象方法,而没有实现method2()抽象方法。因此,Children 类必须声明为抽象类,否则编译出错。
没有抽象构造方法,也没有抽象静态方法,代码如下:
抽象类中可以有非抽象的构造方法,创建子类的实例时会自动调用这些构造方法。抽象类不能被实例化,然而可以创建一个引用变量,其类型是一个抽象类,并让它引用非抽象的子类的一个实例。例如:
抽象类及抽象方法不能被final 修饰符修饰,abstract 修饰符与final 修饰符不能连用。因为抽象类只允许创建子类,它的抽象方法才能被实现,并且只有它的具体子类才能被实例化,而用final 修饰的类不允许拥有子类,用final 修饰的方法不允许被子类方法重写,因此把abstract 修饰符与final 修饰符连用,会导致自相矛盾。例如:
abstract 专门用来修饰类和方法。当它修饰方法时,表示这个方法是“抽象的”,也就是说没有实现,只是做了一个定义。抽象方法在子类中实现,不同的子类可以有不同的实现。当abstract 修饰类时,表示这个类包含有抽象方法,因而是一个“抽象类”。因为抽象类可能包含没有实现的方法,所以不可以创建实例。综上所述,需要注意以下几点:
➢ 如果一个类包含了抽象方法,这个类也必须用abstract 来修饰;但一个抽象类不一定非要包含抽象方法。(www.daowen.com)
➢ 抽象方法必须要通过子类来实现,所以它不可以是静态的,也不可以是final 的。
➢ 抽象类也不可以用final 修饰符来修饰。
下面举个例子演示抽象类的应用。定义抽象类Animal,从抽象类派生具体子类Horse和Dog,实现父类的抽象方法,如例4.14 所示。
例4.14:
Animal.java
Horse.java
Dog.java
Test.java
上面程序运行结果如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。