一、抽象(abstract)的使用
当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。
我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化。这样,抽象类也就诞生了。
二、定义和用法
abstract关键字是不可访问的修饰符,用于类和方法。 类:抽象类是一个受限制的类,不能用于创建对象(要访问它,它必须从另一个类继承)。 方法:抽象方法只能在抽象类中使用,并且方法没有实现。方法实现由子类提供(从继承)。
三、抽象类和抽象方法有以下特点:
1、用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。
2、抽象方法不能有方法主体。格式如下:
abstract void onUEvent();
3、抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。
4、抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。
5、一旦类中包含了abstract方法,那类该类必须声明为abstract类,且该类不能用来创建对象。
6、如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
7、抽象类可以提供成员方法的实现细节,抽象类中的成员变量可以是各种类型的;
8、抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
9、设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。
四、测试代码
1、java 源码
package com.giada.lib;
public class MyClass {
public static void main(String[] args) {
Cat myCat = new Cat(); // 创建一个Cat对象
myCat.eat();
myCat.catchMouse();
}
}
abstract class Animal
{
abstract void eat();
}
class Cat extends Animal
{
public void eat()
{
System.out.println("eat fish");
}
public void catchMouse()
{
System.out.println("catch Mouse");
}
}
2、运行效果如下
五、参考文章