一、抽象类
抽象类属于Java类的高级特性,是一种特殊的类。抽象类用来提供更高级的类型抽象,在面向对象的程序设计语言中,类是有层次和继承关系的。子类总是比其父类更加具体。程序开发过程中,很多时候需要构造一系列的类及其继承关系,这时,通常会将类层次中共有的特性抽取出来,创建包含这些共有特性的抽象类,并由抽象类派生出更加具体、有更多实现的子类或后代类,形成一个完整的类的层次体系。
抽象类可能含有抽象方法,也可能没有,但抽象类中可以含有非抽象的方法。抽象类不能被实例化,不能使用new运算符创建抽象类的实例对象,但是抽象类可以派生子类。
abstract class 类名称{
类体;
}
//如果一个类含有抽象方法,那么这个必须被声明为abstract
public abstract class Animal{
//声明字段
//声明非抽象方法
abstract void eat(); //声明抽象方法
}
当从一个抽象类派生子类时,子类通常提供父类中所有抽象方法的实现。如果子类中没有实现其父类中所有的抽象方法,那么这类子类也必须被声明为abstract(抽象的)。——(如此,我认为这就有点像是C++中的所有静态函数的集合)。
二、抽象类实例
abstract class Animal{
//声明被所有子类共享的成员变量
String name;
……
//声明已经实现的成员方法,可以被所有子类所共享
void sleep();{
……
}
//声明抽象方法,由各个子类去具体实现
abstract void run();
abstract void eat();
}
//声明dog类,是抽象类Animal的子类
class dog extends Animal{
//在子类中实现父类中声明的抽象方法,提供具体的实现
void run (){
……
}
void eat (){
……
}
}
//声明cat类,是抽象类Animal的子类
class cat extends Animal{
//在子类中实现父类中声明的抽象方法,提供具体的实现
void run (){
……
}
void eat (){
……
}
}
在两个类中都实现了run()和eat(),但是他们的具体实现是可以不同的。这样就在抽象类Animal中提供了同一的对外接口,而在子类中去具体实现。——(我认为这就是C++静态成员函数的升级版,”静态类“)
三、抽象方法
abstract <方法返回值类型> 方法名称(参数列表);
eg:
abstract void moveTo(int x, int y);
除了关键字abstract,其他声明与普通方法的声明相同。实际上,一个接口中的所有方法,隐含的都是抽象的,因此接口的方法可以不使用abstract修饰符。当然也可以使用,只不过不是必需的。
四、抽象类与接口
抽象类(abstract):提供部分方法的实现,其余的让子类来完成实现
接 口(interface):只包含抽象方法的声明