类的继承结构中,越往上的类越具有通用性,也就越抽象。当它抽象到一定的程度,就变成了一个概念和框架,不能再产生实例化的对象了。例如“交通工具”,就无法用它来产生一个实例。定义抽象类的方法作用是将一类对象的共同特点抽象出来,成为代表该类共同特性的抽象概念,其后在描述某一具体对象时,只要添加与其他子类对象的不同之处,而不需要重复类的共同性质。这样就使得程序概念层次分明,开发更高效。
在抽象类中,可以有0个或多个抽象方法,也可以有普通的实例方法和静态方法,还可以有其他成员变量和构造方法。使用抽象类的唯一途径就是派生一个子类,如果这个子类实现了抽象类中所有的抽象方法,那么这个子类就是一个普通的类,它可以用来创建对象,否则子类也是一个抽象类。
下面是一个简单的实例。
public abstract class absClass
{
abstract public void absfun();
public void instance()
{
System.out.println("这是一个普通的实例方法");
}
public static void stFun()
{
System.out.println("这是一个普通的静态方法");
}
}
public class implementABC extends absClass
{
public void absFun()
{
System.out.println("这是在子类中实现抽象方法");
}
}
class testABS
{
public static void main(String[] args)
{
implementABC a = new implementABC();
a.absFun();
}
}
那么,我每次要用抽象类的时候,子类都需要把它的抽象方法实现一遍,如果我只需要其中几个方法,而不是全部,通常对那些没有用的方法实现时只给出一对花括号的空方法体。在Java中还有其它的方法解决吗?
与抽象方法紧密相连的是抽象方法—它总是用在抽象类或接口中。抽象方法是一种只有方法声明而没有方法定义的特殊方法。通常的形式如下:
abstract 访问权限 返回类型 方法名([参数列表]);
声明抽象方法有以下几个限制:
构造方法和静态方法不能声明为abstract;
prIvate、final方法不能声明为abstract;
抽象方法只能出现在抽象类或接口中。
如果在抽象类中实现抽象方法,会怎样?结果是每次new它的子类时,都会调用父类的abstract方法。抽象类一个应用就是接口。
实践是学习一门语言的最佳方法。在学习Java的过程中,在老师的引导下,遇到了新知识然后快速学习与应用,下次要学到GUI的编程,需要应用大量抽象类,希望在应用中更能深入理解抽象类。