抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。抽象类体现的就是一种模板模式的设计,抽象父类可以只定义需要使用的某些方法,把不能实现的某些部分抽象成抽象方法,留给其子类去实现。具体来说,抽象类的使用有以下几点要注意:
1.抽象方法和抽象类必须使用abstract来修饰,其中抽象方法不能有方法体。
2.抽象类不能被实例化。
3.抽象类可以包含成员变量,方法(普通方法或抽象方法),构造器(抽象类的构造器不能用于创建实例,主要是被其子类调用),初始化块,内部类(接口,枚举)这五种成分。
4.含有抽象方法的类只能定义成抽象类,而抽象类中可以没有抽象方法。
下面看具体的使用例子:
//先在文件Animal.java 中定义一个抽象类
packageanimal;public abstract classAnimal
{publicString name;publicAnimal(String name)
{this.name =name;
}public abstract voideat();public abstract voidmove();
}
然后分别定义三个子类来实现这个抽象父类:
packageanimal;public class Dog extendsAnimal
{publicDog(String name)
{super(name);
}public voideat()
{
System.out.println(name+ " eat meat and grass.");
}public voidmove()
{
System.out.println(name+ " move with legs.");
}
}packageanimal;public class Bird extendsAnimal
{publicBird(String name)
{super(name);
}public voideat()
{
System.out.println(name+ " eat insect.");
}public voidmove()
{
System.out.println(name+ " move with wings.");
}
}packageanimal;public class Fish extendsAnimal
{publicFish(String name)
{super(name);
}public voideat()
{
System.out.println(name+ " eat algae.");
}public voidmove()
{
System.out.println(name+ " move with tail.");
}
}
可以看到三个子类继承了父类的一个成员变量name, 并且分别实现了两个抽象方法 eat() 和 move(). 然后我们定义一个测试类,并运行结果:
packageanimal;public classSummary
{public static voidmain(String[] args)
{
Dog animal1= new Dog("Shepherd");
Bird animal2= new Bird("Sparrow");
Fish animal3= new Fish("carp");
System.out.println(animal1.name);
animal1.eat();
animal1.move();
System.out.println(animal2.name);
animal2.eat();
animal2.move();
System.out.println(animal3.name);
animal3.eat();
animal3.move();
}
}
运行结果如下:
Shepherd
Shepherd eat meat and grass.
Shepherd move with legs.
Sparrow
Sparrow eat insect.
Sparrow move with wings.
carp
carp eat algae.
carp move with tail.
那么初步的抽象类的使用就是这样了,具体的细节还需要去多看书多实践。